2013-11-22 5 views
11

Ich beginne gerade mit Django Internationalisierung und versuche, die besten Praktiken für die Verwendung von {% blocktrans %} zu verstehen. Ist es vorzuziehen, einen {% blocktrans %} für jeden Absatz zu verwenden, oder sollte ich einen großen {% blocktrans %} haben, der viele Absätze enthält?Django i18n: empfohlene Größe und Formatierung für {% blocktrans%} Blöcke?

Mit einem großen {% blocktrans %} schneller und macht meine Vorlage sieht Reiniger, aber meine Sorge ist, dass:

  • es verursacht HTML-Tags (wie <p>...</p>) ist Teil der Übersetzung Zeichenfolge werden
  • Wenn ich ändern eine Sache in einem Teil meines riesigen Blockes würde sich die msgid ändern, die scheint, könnte es die anderen Absätze beeinflussen. Wenn ich kleinere Blöcke habe, wären die Änderungen isolierter (nehme ich an).
  • Wenn ich eine Formatierungsänderung wie das Hinzufügen/Entfernen eines Zeilenumbrüche zwischen Absätzen mache, würde das die msgid ändern.

Ich frage mich auch über die Formatierung. Gibt es irgendwelche Komplikationen bei Zeilenumbrüchen in einem {% blocktrans %}? Oder führende Räume haben? Beispiel:

{% blocktrans %} 
    You have {{ num_messages }} messages. 
    Another sentence. 
{% blocktrans %} 

Alle Empfehlungen sind willkommen.

+0

Wenn Sie so viel Zeug in Ihren Blocktrans stecken müssen, sollten Sie ein Content-Management-System in Betracht ziehen - nicht unbedingt ein vollwertiges CMS, aber zumindest etwas weniger hartcodiert. –

+0

(Der von @brunodesthuilliers geschriebene Kommentar bezieht sich auf ein Codebeispiel, das ich vor der Bearbeitung in der Frage hatte.) – RexE

+0

Es macht aber immer noch Sinn. –

Antwort

9

Mehrere kleine {% blocktrans %} Blöcke sind vorteilhaft aus verschiedenen Gründen:

  • Jeder übersetzbaren String endet in den Übersetzungsdateien und diese Dateien sollten von Menschen übersetzbar sein, die die Sprache sprechen. Sie sollten sich nicht mit der Korrektheit von HTML-Tags auseinandersetzen müssen, sondern nur ein paar Sätze in diese Sprache übersetzen. Ein kleines Markup ist in Ordnung, aber nicht das HTML der gesamten Seite.

    Sie können es sich auch so vorstellen: Je weniger Markup in den übersetzbaren Strings, desto weniger Fehlerquellen für Übersetzer (die einen technischen Hintergrund haben können oder nicht).

  • Wenn sich ein großer Übersetzungsblock ändert, müssen alle Übersetzungen erneut von jedem der Übersetzer ausgeführt werden. Wenn Sie kleine übersetzbare Blöcke verwenden, können Sie die meisten der bereits übersetzten Absätze/Texte wiederverwenden und brauchen nur aktualisierte Übersetzungen für die tatsächlich geänderten Teile zu erhalten.

So, um Ihre Frage zu beantworten: Ein Blocktrans-Tag pro Absatz ist eine bessere Wahl. Wenn Sie einen Absatz ändern, muss nur dieser Absatz erneut von einem Übersetzer überprüft werden.

In Bezug auf Leerzeichen und Zeilenumbrüche: Standardmäßig werden diese in den PO-Übersetzungsdateien enden. In Django 1.7 die blocktrans eine trimmed Option haben, die Leerzeichen und Zeilenumbrüche entfernt (source):

Diese Option wird Zeilenumbrüche aus dem Anfang und dem Ende des Inhalts der {% blocktrans%} Tag entfernen, ersetzen alle Leerzeichen am Anfang und Ende einer Zeile und alle Zeilen zu einem zusammenführen, indem Sie ein Leerzeichen verwenden, um sie voneinander zu trennen. Dies ist sehr nützlich, um den Inhalt eines {% blocktrans%} -Tags einzurücken, ohne dass die Einrückungszeichen im entsprechenden Eintrag in der PO-Datei landen, was den Übersetzungsprozess vereinfacht.

+0

Danke Simeon! – RexE

Verwandte Themen