2016-04-29 2 views
0

Ich verwende Django==1.8.4.Grub Zeichenketten zu .po Dateien, die an Ugettext als Variablen übergeben wurden

Innerhalb django Anwendung i ugettext bin mit übersetzte Nachricht in der nächsten Weg zu bekommen:

id = 1 
message = "Some message %(id)s" % {'id':id} 
return JsonResponse({'message': ugettext(message)}) 

In django offizieller Dokumentation gibt es Anmerkung bezüglich Variablen mit ugettext übersetzen.

(Die Einschränkung mit Variablen oder berechneten Werten, wie sie in den beiden vorangegangenen Beispielen ist, dass Djangos Übersetzung-string-Erkennung Dienstprogramm, django-admin makemessages, nicht in der Lage sein, diese Strings zu finden .. Mehr zu makemessages später

Quelle: Django documentation page

gibt es eine andere Art und Weise sind Nachrichten zu roden Dateien ohne Refactoring alle Aufruf von ugettext automatisch .PO (Pass DIREC t Zeichenfolge in Ugettext statt Variable)?

Antwort

1

Rufen Sie vor dem Ersetzen von Variablen den Text ugettext im Stringliteral auf.

message = ugettext("Some message %(id)s") % {'id':id} 
+0

Danke, ich weiß, dass das möglich ist. Die Frage ist, wie man ein solches Refactoring vermeiden kann. –

+0

Ich glaube nicht, dass es ist. Die Variable "message" wird jedes Mal anders sein, also müsste sie Nachrichten für jede Version in der .po-Datei generieren. Wie möchten Sie Ihre .po Datei Nachrichten aussehen? BTW, Sie vergaßen die {} um das Diktat im Argument zu JsonResponse; 'JsonResponse ({'Nachricht': Ugettext (Nachricht)})'. – Alvra

+0

Der ** kanonische ** Weg besteht darin, alle übersetzten Quellstrings im Quelltext zu kommentieren, dh 'message = _ (" Einige Nachrichten% (id) s ")% {'id': id}', so dass Drittanbieter-Tools finde alle diese Strings, also für die statische Analyse. (Obv, 'von xx import ugettext as _') Beachten Sie, dass dieses" Refactoring "nur 3 Zeichen für jede benutzerorientierte Zeichenkette' _() 'enthält. Die Alternative ist es, eine eigene Toolchain zu erstellen ... Und dann versuchen Sie es einfach einem anderen Entwickler zu erklären, der später Ihren Code unterstützen muss. –

Verwandte Themen