5

Ich erlebe die Aufgabe von i18n/l10n die Dokumentation eines größeren Projekts. Die Dokumentation erfolgt mit Sphinx, das von der Stange basic support for i18n ist.Kann man aus der Sphinx-Dokumentation eine einzige .pot-Datei erzeugen?

Mein Problem ist ähnlich dem von this other question: nämlich die Tatsache, dass ein großer Teil der Strings für jede Pot-Datei ist die gleiche, und ich möchte meine Übersetzer nicht immer wieder die gleiche Übersetzung wieder eingeben. Ich hätte lieber eine einzige Vorlagendatei.

Mein Problem ist nicht wirklich die Dateien Fusion (das ist nur ein msgcat *.pot > all.pot entfernt), sondern vielmehr die Tatsache, dass - für den Domains zu arbeiten, wenn die Dokumentation in einer bestimmten Sprache Aufbau - ich habe all.pot zu kopieren und benennen Sie zurück zu die ursprünglichen Dateinamen. Also meine workaroundish Arbeitsweise ist:

  1. generieren fileA.pot, fileB.pot
  2. Merge die beide in all.pot
  3. cp all.pot fileA.pot + cp all.pot fileB.pot

Gibt es einen sauberen Weg, um das gleiche zu tun? gettext_compact bringt mich nur auf halbem Weg durch mein Ziel ...

+0

Haben Sie überlegt, einen Translation Memory zu verwenden (mit eindeutigen Quell-/Übersetzungsschlüsselwerten)? – Shervin

+1

@Shervin - Ja, habe ich, aber das würde die Komplexität der Architektur beträchtlich erhöhen, ohne dem Ergebnis einen Vorteil zu verschaffen (über meine derzeitige Problemumgehung). – mac

Antwort

1

Nach über 7 Monaten, umfangreicher Recherche und ein paar Lösungsversuchen scheint es sicher zu sein, dass zumindest mit der aktuellen Version 1.1.3 - keine einzige .pot Datei aus der Sphinx-Dokumentation erzeugt werden kann.

Die in der ursprünglichen Frage beschriebene Problemumgehung ist auch die einfachste zum automatischen Entfernen doppelter Zeichenfolgen beim Zusammenführen der verschiedenen .pot Dateien in eine einzige.

0

Ich sehe zwei Möglichkeiten:

One ist Sphinx zu hacken nicht alle Domains zu verwenden, ..., das ich denke, Sie werden nicht für tun wollen mehrere Gründe.

Das andere ist: Da Sie nach Domänen aufgeteilt haben, sieht die Option -M msggrep so aus, als würde sie tun, was Sie tun müssen. Andernfalls kann die Option -N weiterhin zum Filtern nach Quelldatei (en) verwendet werden.

Das heißt, wenn die offensichtliche Lösung funktioniert nicht:

  • erzeugen fileA.pot, fileB.pot (auch bei msguniq hier)
  • sie in all.pot verschmelzen und geben das zu
  • Übersetzer
  • for x in file*.pot; do msgmerge -o ${x%t} all-translated.po $x; done

nach TFM nimmt msgmerge nur die (angeblich neuen) Übersetzungen von seinem ersten Argumente (der übersetzte po Datei), die den aktuellen Quellorten des zweiten Arguments entsprechen (po-Datei mit alten Übersetzungen oder pot file = Vorlage mit nur leeren msgstrings).

+0

Ich bin nicht sicher, ich habe, was der technische Vorteil dieser Lösung ist, über meinen jetzigen Hack, könnten Sie bitte klären? – mac

+0

Ich habe verstanden, dass Ihr aktueller Hack alle Zeichenfolgen in den Dateien fileA.pot und fileB.pot gespeichert hat und dachte, Sie wollten sie bereinigen. Wenn das nicht der Fall ist, fürchte ich, dass ich Ihr Problem nicht richtig verstanden habe, können Sie klären, wie wir helfen können? – mirabilos

+0

Der Titel der Frage sagt schon alles. :) Außerdem scheint Ihre Antwort - auf eine längere Art und Weise - zu replizieren, was die in der Frage beschriebene Lösung bereits tut (versuchen Sie für sich selbst, das resultierende .pot ist bereits sauber und braucht kein Mangeln mehr) ... oder bin ich etwas vermissen? – mac