5

Sono sottoposto al compito di i18n/l10n la documentazione di un progetto più ampio. La documentazione è fatta con Sphinx, che ha lo scaffale basic support for i18n.È possibile generare un singolo file .pot dalla documentazione Sphinx?

Il mio problema è simile a quello di this other question: vale a dire il fatto che una grande porzione di stringhe per ogni file pot è la stessa, e vorrei che i miei traduttori non reinserissero la stessa traduzione più e più volte. Preferirei avere un singolo file modello.

Il mio problema non è quello di unire i file (che è solo uno msgcat *.pot > all.pot di distanza), ma piuttosto il fatto che - affinché i domini funzionino quando si costruisce la documentazione in una particolare lingua - devo copiare e rinominare all.pot i nomi dei file originali. Quindi il mio modo di lavorare è workaroundish:

  1. Genera fileA.pot, fileB.pot
  2. unire i due in all.pot
  3. cp all.pot fileA.pot + cp all.pot fileB.pot

C'è un modo più pulito di fare lo stesso? gettext_compact mi porta solo a metà strada attraverso il mio obiettivo ...

+0

Avete considerato di utilizzare una memoria di traduzione (che ha valori di chiave sorgente/traduzione univoci)? – Shervin

+1

@Shervin - Sì, sì, ma ciò aumenterebbe considerevolmente la complessità dell'architettura senza apportare alcun beneficio al risultato (rispetto alla mia soluzione attuale). – mac

risposta

1

Dopo oltre 7 mesi, ricerche approfondite e un paio di risposte tentate, sembra sicuro di dire che no - almeno con l'attuale versione 1.1.3 - non è possibile generare un singolo file .pot dalla documentazione Sphinx.

La soluzione descritta nella domanda originale è anche la più semplice per rimuovere automaticamente le stringhe duplicate quando si uniscono i diversi file .pot in uno solo.

0

Vedo due possibilità qui:

Uno è quello di incidere Sfinge di non utilizzare i domini a tutti ... che credo che non si vuole fare per diverse ragioni.

L'altro è: dal momento che dividi per domini, l'opzione -M di msggrep sembra che faccia ciò che devi fare. In caso contrario, l'opzione -N può ancora essere utilizzata per filtrare in base ai file di origine.

Cioè, se la soluzione più ovvia non funziona:

  • generare fileA.pot, fileB.pot (vedi anche msguniq qui)
  • unirli in all.pot e dare che a traduttori
  • for x in file*.pot; do msgmerge -o ${x%t} all-translated.po $x; done

Secondo TFM, msgmerge richiede solo le definizioni (presumibilmente più recenti) dal suo primo argomento (Po tradotto file) che corrispondono alle ubicazioni di origine aggiornate del secondo argomento (file po con traduzioni precedenti o file pot = modello con solo msgstrings vuoti).

+0

Non sono sicuro di aver ottenuto il vantaggio tecnico di questa soluzione, per il mio trucco attuale, potresti chiarire per favore? – mac

+0

Ho capito che il tuo attuale trucco ha tutte le stringhe nei file eventA.pot e fileB.pot e ho pensato di volere ripulirle. Se non è così, temo di non aver capito bene il tuo problema, puoi chiarire come possiamo aiutarti? – mirabilos

+0

Il titolo della domanda dice già tutto. :) Inoltre, la tua risposta sembra replicare - in un modo più lungo - ciò che la soluzione descritta nella domanda già fa (prova per te stesso, il risultato .pot è già pulito e non ha bisogno di più mangling) ... o sono io manca qualcosa? – mac

Problemi correlati