web-dev-qa-db-ja.com

.moファイルはいつ生成されるべきですか?

python GTK3プログラムを作成しています。翻訳サポートを追加したいと思います。 .potおよび.poファイルを作成する方法を知っています。ただし、アプリケーションを複数の言語で使用できるようにするには、.moファイルを生成する必要があります。 here と読みます。moファイルを生成する方法はmsgfmt.makeコマンドを使用していることです。

私の質問は、私(開発者)がコンピューターで.moファイルを手動で生成し、インストール中に.debインストーラーにファイルをusr/share/locale/en_GB /フォルダーに移動するよう指示する必要があるかどうかです。または、ユーザーがシステムにプログラムをインストールしているときに、.debインストーラーがこれらの.moファイルを生成する必要がありますか?

。moファイルはマシンに依存していますか?」と要約できます。

私のフォルダ構造は次のとおりです

nstrain-0.1
   /debian
   /data
   /help
   /nstrain_lib
   nstrain.desktop
   nstrain.py

nstrain.pyは、ユーザーがプログラムをクリックしたときに.desktopファイルが実行されるメインの実行可能ファイルです。

6
nik90

バイナリ MOファイル ビルド時に生成する必要があります。つまり、ビルドシステムには、ソースとして使用されるテキスト POファイル を読み取り、それらをユーザーのシステムにインストールされるバイナリMOファイルに変換するビルドターゲットが必要です。正しく指摘すると、 msgfmt コマンド( gettext tools の一部)が最終的にそれらを作成します。

したがって、質問の最後の部分に答えるために、はい、MOファイルはマシンに依存しています。

難しい方法でMOファイルを作成する

次に、それらを作成する方法について説明します。標準のgettextレイアウトでは、通常、すべてのPOファイルが同じディレクトリにあり、言語ごとに1つあり、各言語のISO-639 2文字または3文字コードにちなんで名前が付けられます。

po/
po/ca.po
po/de.po
...

それらを手動でビルドする場合は、そのディレクトリ内の各ファイルを調べて、手動でmsgfmtを呼び出す必要があります。

$ msgfmt -c po/ca.po -o build/locale/LC_MESSAGES/ca/myapp.mo

しかし、すでに確立された方法があり、特にMOファイルの構築操作用に作成された自動化ツールがある場合は、これを実行したくないでしょう。

さらに、これらのツールは、コードから翻訳を抽出し、POTファイルにまとめて翻訳者が作業を行えるようにするなど、他の関連タスクを処理します。

巧妙な方法でMOファイルを作成する

Pythonを使用している場合は、 python-distutils-extra パッケージ(pdeのインストール)を使用することをお勧めします。これは、setup.pyアプリのビルド、インストール、配布に使用するファイル。 @dobeyと同じ例がすでに彼の答えを指摘していた:

DistUtilsExtra.auto.setup(
    name='myapp',
    version='0.1',
    #license='GPL-3',
    #author='Your Name',
    #author_email='[email protected]',
    #description='UI for managing …',
    #long_description='Here a longer description',
    #url='https://launchpad.net/myapp'
)

それはあなたのためにすべての世話をします。

翻訳を出荷する前にテストする場合は、python-distutils-extraの便利なbuild_i18nコマンドを使用できます。

$ python setup.py build_i18n

これにより、/poフォルダー内のすべてのPOファイルがビルドされ、システムにインストールされたときにgettextが期待するレイアウトと同じレイアウトでbuildの下に配置されます(存在しない場合は作成されます)。

その後、次のいずれかの方法でアプリケーションを翻訳してテストできます。* /buildの内容を/usr/share/localeにコピーするか、* gettext.bindtextdomain() 関数を使用してアプリをビルドディレクトリにポイントする:

gettext.bindtextdomain(domain='myapp', localedir='/home/me/dev/myapp/build')

さらに賢いこと

巨人の肩の上に立ってください。 Quickly を使用してテストアプリケーションを作成し、setup.pyでの翻訳のセットアップ方法をコピーします。基本的には、上記で説明したDistutilsExtraモードでautoモジュールを使用することになります。

テストアプリを使用して、翻訳の生成も試して、生成の仕組みを学ぶことができます。

パッケージング

リリースの一部としてまとめたtarballには、.moファイルを含めないでください。つまり、手動でビルドする必要はありません。誰かが手動でインストールするためにtarballの内容をビルドしたとき、またはDebianバイナリパッケージが作成されています。

ソースツリーを見て、再度python-distutils-extraなどのビルドシステムを使用することをお勧めします。これはパッケージ化にも役立ちます。大体、次のことが必要です。

  • 上記で提案した内容と同様の内容でsetup.pyファイルを作成します
  • Debian /の下にパッケージング制御ファイルを作成します。 p-d-eを使用すると、debian/rulesファイルは非常にシンプルになり、数行で構成されます。

実際、Quicklyを使用して、アプリのビルドおよびパッケージングシステムのハーネスを作成し、テストアプリケーション用にQuicklyで生成されたソースコードをアプリケーションのコードに置き換えるだけです。

5
David Planella

Pythonを使用している場合、setuptools/distribute/distutilsをビルドシステムとして使用していると仮定します。そのような場合、代わりにDistUtilsExtra.autoを使用できます。


from DistUtilsExtra.auto import setup

setup(
    name="Your Project",
    version="0.1",
    ...
)

パッケージに対して通常行うのと同じ引数をsetup()に渡すことができます。 DistUtilsExtra.autoは、.desktopファイルなどの静的テキストファイルの翻訳を含む、翻訳などの多くのシステム統合部分を自動的に処理できます。

2
dobey