Gladeが/ optから翻訳をロードする方法


9

Ubuntuアプリデベロッパープロセスを通じて提出したいアプリケーションを作成しました。プロセスの要件の1つは、インストール時にすべてのファイルが/opt/extras.ubuntu.com/<appname>ディレクトリに移動することです。

パッケージの変更と他の人の助けを借りてそれを達成しましたが、今、私は新しい問題に直面しています:/optアプリからの翻訳から実行すると、ロードされません。

何が起こるかは次のとおりです。特に指定がない限り、アプリケーションの翻訳を含むバイナリファイル(MOファイル)は/usr/share/locale(Ubuntuの場合は/usr/share/locale-langpack)から読み込まれますが、私のアプリでは/opt要件により、/opt/extras.ubuntu.com/qreator/locale

gettextでは翻訳をロードするための別の場所を指定できるため、理論的には問題ありません。そのため、bindtextdomain呼び出しを追加してそれを実現します。

import gettext
from gettext import gettext as _
gettext.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
gettext.textdomain('qreator')

コマンドラインで出力されるすべてのメッセージは、期待どおりに翻訳されたように見えます。しかし、それは主な問題を解決しません:UI Gladeから翻訳をロードするには、もう一度翻訳ドメインを指定する必要があります(gettext.textdomain('qreator')上記の呼び出しと同等)が、そこから翻訳をロードする場所を指定することはできません(つまり、Gladeと同等です)bindtextdomain残念ながら存在しません)。これが私が使用しているコードの抜粋です:

builder = Gtk.Builder()
builder.set_translation_domain('qreator')
# There isn't a way to tell glade to load translations from
# somewhere else than /usr/share/locale here
builder.add_from_file(ui_filename)

つまり、アプリがにインストールされている場合、UIからの翻訳を読み込むことができません/opt

この時点ではかなり行き詰まっています。の/opt/extras.ubuntu.com/qreator/share/locale/代わりにGladeが翻訳をロードする方法に関するアイデアはあり/usr/share/localeますか?


Gtk.Builderについて詳しい知識のある人と話をした後、バグを報告しました:bugzilla.gnome.org/show_bug.cgi
id=676543

私も回避策を指摘されましたが、私にはうまくいかなかったようです-ここにあります:bugs.debian.org/cgi-bin/bugreport.cgi?bug
David Planella

Pythonコードに完全に最小限の実行可能な例を含めてもらえますか?私はこれにドリルダウンして満足していますが、Gtk.Builder()を取得するためにどのインポートが欠落しているかはわかりません。
slangasek

n / m、明らかにそれは単なる「インポートgtk」です;)
slangasek

1
右-あきらめた、gettext.bindtextdomain()がgladeを保持するための正気な方法はないようだ:/
slangasek

回答:


10

私は解決策を見つけました:gettextの代わりにロケール Pythonモジュールを使用します

import locale
from locale import gettext as _
locale.bindtextdomain('qreator', '/opt/extras.ubuntu.com/qreator/share/locale/')
locale.textdomain('qreator')

説明を提供してくれた#gtk + IRCチャンネルのJuha Sahakangasに感謝します。

この特定のケースでは、gettextの代わりにlocaleモジュールを使用する必要があります。Pythonのgettextモジュールは純粋なpythonであり、実際にはCライブラリが読み取ることができるようにテキストドメインを設定しませんが、ロケールは(libcを呼び出すことによって)設定します。それが行われている限り、GtkBuilderは要求どおりに動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.