2009-06-19 5 views
0

makemessages django-admin.py des matrices avec des erreurs « avertissement: chaîne non terminée » sur les cas où des chaînes très longues sont enveloppés:bug dans "django-admin.py makemessages" ou appel xgettext? -> « avertissement: chaîne non terminée »

string = "some text \ 
      more text\ 
      and even more" 

Ces chaînes ne même pas besoin à traduire - par exemple chaînes de requête sql. Le problème disparaît lorsque je concatène la chaîne, mais le résultat semble moche et il faut du temps pour les rejoindre ...

Quelqu'un at-il un problème comme celui-ci? Avez-vous trouvé un moyen de le réparer?

Je les versions suivantes des outils impliqués:

xgettext-0.17, gettext-0.17, django-1.0.2, python-2.6.2

Il y avait un ticket sur cette question, mais il a été fermé probablement parce que l'erreur apparaît seulement dans une combinaison de versions de composant.

EDIT: a trouvé la source du problème - xgettext imprime des messages d'avertissement à sterr et django les prend comme des erreurs fatales et se ferme.

L'état de retour de l'appel xgettext est 0 - "succès". Je suppose que Django devrait le reconnaître comme un succès et ne pas quitter à cause des avertissements.

Interestinly xgettext extrait encore des chaînes enveloppées backslash, si elles ont besoin d'être traduits, mais donne des avertissements à stderr (« chaîne non terminée ») et .po fichier (« messages internationalisés ne doivent pas contenir la fuite` \ r » séquence »)

d'appel xgettext est le suivant:

xgettext -d django -L Python --keyword=gettext_noop \ 
     --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 \ 
     --keyword=ugettext_noop --keyword=ugettext_lazy \ 
     --keyword=ungettext_lazy:1,2 
     --from-code UTF-8 -o - source_file.py 

appelé à partir de django/core/gestion/commande/makemessages.py

Répondre

2

Je peux penser à deux possibilités: vous pourriez avoir un espace supplémentaire après votre backslash à la fin de la ligne; ou vous pourriez vous retrouver avec les mauvais caractères de fin de ligne dans votre source (par exemple, style Windows lorsque votre Python attend un style Unix, désactivant ainsi les barres obliques inverses).

De toute façon, je profiterais de concaténation de chaîne automatique de style C:

>>> string = ("some text " 
...   "more text " 
...   "and even more") 
>>> string 
'some text more text and even more' 

Sinon, si vous ne me dérange pas les nouvelles lignes se retrouvent là-dedans, utiliser des chaînes multi-lignes:

>>> string = """some text 
...    more text 
...    and even more""" 

Ces IMO sont beaucoup plus beaux et beaucoup moins fragiles lors du refactoring.

Est-ce que cela aide?

+0

@chrispy Cela aide, merci. Juste double-vérifié - Je n'ai pas d'espace après backslash. C'est Django ou xgettext n'obtenant pas l'encapsulation de la barre oblique inverse. – Evgeny

+0

À partir de votre prochaine édition sur \ r, je suis assez confiant que c'est un problème de fin de ligne. Essayez un éditeur qui vous permet de spécifier le format de fichier Unix au lieu de Windows. –

Questions connexes