2012-03-06 7 views
7

Ho bisogno di estrarre messaggi dai file .po. C'è un modulo Python per farlo? Scrivo un parser, ma dipende dalla piattaforma (come \ r \ n, \ n), quindi forse c'è un modo normale per farlo?analizzando i file gettext .po con python

risposta

0

Babel include un parser file .po scritto in Python:

http://babel.edgewall.org/

Il modulo incorporato gettext funziona solo con file .mo binari.

-2

Usa modulo gettext integrato: http://docs.python.org/library/gettext.html

è apparso per me come il primo risultato di ricerca in Google dopo aver fornito python gettext. Se ti chiedessi se questo è quello che hai cercato, allora sì, lo è.

+1

'gettext' è impressionante, ma funziona solo con compilati' file mo', non semplice testo 'quelli po' – MestreLion

17

Nella maggior parte dei casi non è necessario analizzare personalmente i file .po. Gli sviluppatori danno ai traduttori un file modello .pot, lo rinominano in xx_XX.po e traducono le stringhe. Allora voi come sviluppatore deve solo "compilazione" loro di .mo file utilizzando gettext strumenti di GNU (o la sua implementazione di Python, pygettext)

Ma, se si vuole/bisogno di analizzare i file del Po da soli, invece di compilazione, ho consiglia vivamente di utilizzare polib, una libreria Python nota per gestire i file po. E 'utilizzato da numerosi progetti su larga scala, come Mercurial e Ubuntu del motore di traduzione Launchpad:

pacchetto Cheese Shop casa: http://pypi.python.org/pypi/polib/

repository di codice: https://bitbucket.org/izi/polib/wiki/Home

Documentazione: http://polib.readthedocs.org

Il modulo di importazione è un singolo file, con licenza MIT, quindi puoi facilmente inserirlo nel tuo codice come questo:

import polib 
po = polib.pofile('path/to/catalog.po') 
for entry in po: 
    print entry.msgid, entry.msgstr 

Non può essere più facile di così;)

+1

@saeedgnu: forse si potrebbe aiutarlo a migliorarlo? 'polib' è la libreria più utilizzata per manipolare i file po ed è attivamente mantenuta, quindi qualsiasi miglioramento andrà a beneficio di un * lotto * di software – MestreLion

+0

Penso che sia stato pensato per essere così, il programma che lo utilizza potrebbe aggiungere alcune voci dopo caricamento di file po (o creazione di un nuovo oggetto pofile), è tutto in memoria – saeedgnu