polib - zarządzanie tłumaczeniami gettext

polib to moduł pythona do zarządzania tłumaczeniami gettexta - plikami *po i *mo. Potrafi na operacje odczytu/zapisu do tych plików oraz umożliwia pozyskanie informacji na temat stanu przetłumaczenia danego pliku .po, co jest przydatne przy tłumaczeniu aplikacji. Instalacja jest prosta, albo za pomocą setuptools albo z poziomu pobranej paczki:
easy_install polib
python setup.py install

polib składa się z 4 klas: POFile, MOFile, POEntry i MOEntry do obsługi plików i wpisów w nich zawartych. pofile umożliwia operacje na plikach .po i zawiera m.in. następujące metody:
  • to_binary() - zwróci binarną wersję pliku po (czyli plik .mo)
  • save([fpath]) - zapisuje zmiany do pliku pod podaną ścieżką. Jeżeli parametr zostanie pominięty zaktualizowany zostanie używany plik po
  • save_as_mofile(fpath) - zapisuje wynikowy plik mo pod podaną ścieżką
  • percent_translated() -> integer - zwraca procentowy udział przetłumaczonych fraz
  • translated_entries() -> list - zwraca listę przetłumaczonych fraz
  • untranslated_entries() -> list - zwraca listę nieprzetłumaczonych fraz
  • fuzzy_entries() -> list - zwraca listę tzw. "fuzzy" fraz (np. automatycznie uzupełnionych przez gettexta)
  • charset() -> string - zwraca kodowanie pliku lub None w przypadku braku deklaracji kodowania
Właściwości:
  • header - zwraca łańcuch zawierający nagłówek pliku .po
  • metadata - zwraca słownik z metadanymi
POEntry posiada następujące właściwości:
  • msgid - zwraca łańcuch z frazą do przetłumaczenia (msgid)
  • msgid_plural - zwraca łańcuch z potoczną wersją frazy do przetłumaczenia
  • msgstr - zwraca łańcuch z przetłumaczoną frazą
  • msgstr_plural - zwraca słownik zawierający wszystkie potoczne (plural) tłumaczenia frazy
  • comment - zwraca łańcuch z wygenerowanym komentarzem
  • tcomment - zwraca łańcuch z komentarzem tłumacza
  • flags - zwraca listę z flagami frazy (np. fuzzy, c-format)
Pełna dokumentacja dostarczana jest wraz z modułem.

Przykładowy kod

Poniższy kod wyświetli dane na temat danego pliku .po:
import polib

po = polib.pofile('a.po')
print po.percent_translated()
print po.charset()
print po.metadata
Obiekt POFile może iterować otrzymując obiekty POEntry:
import polib

po = polib.pofile('a.po')
for i in po:
	print i.comment
	print i.tcomment
	print i.msgid
	print '-------------------'
Można też modyfikować plik i zapisywać zmiany:
# -*- coding: utf-8 -*-
import polib

po = polib.pofile('a.po')
# wywalamy flagi.. tak dla przykładu
for i in po:
	print i.flags
	i.flags = []
po.save()

# dodajemy komentarz do każdej nieprzetłumaczonej frazy
for i in po.untranslated_entries():
	i.tcomment = 'Przetłumaczyć to natychmiast!'
po.save()
RkBlog

Podstawy Pythona, 14 July 2008

Comment article
Comment article RkBlog main page Search RSS Contact