Python Tips: GetText (.po) ファイルの要素を抽出したい

Python で、 GetText (.po) ファイルの要素を抽出する方法をご紹介します。

「 GetText って何?」という方は Wikipedia を参考になさってみてください。

pip パッケージのひとつに polib というものがあり、こちらを使うと GetText (.po) ファイル(以下 .po ファイル)を Python でシンプル・かんたんに扱うことができます。

インストール

インストールにはおなじみ pip コマンドを使用しましょう。

pip install polib

使い方

.po ファイルの読み込みには pofile() 関数を使います。

import polib

po = polib.pofile('path/to/catalog.po')

作成日や作成者を含むメタデータは metadata プロパティに格納されています。

print(po.metadata)

.po ファイルに含まれる各翻訳テキストは POFile オブジェクトをイテレータとして使用すると取得することができます。

for entry in po:
    print('{}: {}'.format(entry.msgid, entry.msgstr))

有効な翻訳文を持つ翻訳テキストのみに限定して取得したい場合は translated_entries() メソッドが便利です。

for entry in po.translated_entries():
    print('{}: {}'.format(entry.msgid, entry.msgstr))

以上です。

ここでご紹介したのは .po ファイルの要素を抽出する方法だけですが、 polib では他にも「要素の追加」「 .po ファイルの新規作成」「 .po ファイルの更新」などひととおりの処理がサポートされています。興味のある方は公式の Quick start guide をご覧になってみてください。

私の場合は「巨大な .po ファイルのうち一部の要素を切り出して小さな .po ファイルを作りたい」という要望があり、 .po ファイルからの要素抽出スクリプトを作成するのに使用しました。興味のある方は次の gist の方も参考にしてみてください。

参考