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
ますか?