さて、さらに考えてみると、gettextで既存の翻訳を使用する方法を知っていることに気づきました。既存のテキストドメインを使用するにはasdf
、
const Gettext = imports.gettext.domain('asdf');
const _ = Gettext.gettext;
そこに驚きはありません。
私の実際の問題は、「最小化」、「最大化」、「復元」、「閉じる」などの翻訳を使用したかったことでした。これらの翻訳はシステムのどこかにすでに存在していると確信していましたが、彼らが実際にどのgettextドメインにいたのかわからない。
これを見つけるには:
Fedora(とにかく私のバージョン)では、翻訳されたテキストはにあり/usr/share/locale
ます。
入って/usr/share/locale/en_GB/LC_MESSAGES
みると、そこにはたくさんの.mo
ファイルがあります。これらは人間が読める形式ではありませんが、それでもgrepできます。
[foo@bar]$ grep -i maximize *.mo
Binary file devhelp.mo matches
Binary file evolution-3.2.mo matches
Binary file f-spot.mo matches
Binary file gnome-games.mo matches
Binary file gnome-media-2.0.mo matches
Binary file gnome-utils-2.0.mo matches
Binary file metacity.mo matches
Binary file mutter.mo matches
Binary file nautilus.mo matches
リストを見ると、ウィンドウメニューで項目の翻訳を探しているので、それらの翻訳を所有しているのはおそらく私のウィンドウマネージャーであることに気づきました。私のウィンドウマネージャー(私はgnome-shellを使用しているため)はmutter
、に基づいていmetacity
ます。
それで、私はつぶやきのソースをダウンロードしてpo
ファイル(人間が読める翻訳ファイル)を調べました、そして見よ!
#: ../src/ui/menu.c:69
msgid "Mi_nimize"
msgstr "Mi_nimise"
#: ../src/ui/menu.c:71
msgid "Ma_ximize"
msgstr "Ma_ximise"
#: ../src/ui/menu.c:73
msgid "Unma_ximize"
msgstr "Unma_ximise"
...and so on (the underscores are the keyboard accelerators for that menu item).
翻訳を見つけたので、それは単に(私のコードで)行う場合でした:
const Gettext = imports.gettext.domain('mutter')
const _ = Gettext.gettext;
log(_("Ma_ximize")); // to translate 'Ma_ximize'
(ファイル_("Ma_ximize")
で翻訳される正確な文字列であるため、gettextにフィードする必要があります。アンダースコアなしの翻訳はありません。後で翻訳されたテキストからアンダースコアを削除する必要があり、アンダースコアを使用する言語が台無しになる可能性があります。どういうわけか彼らの執筆の一部として、しかし私はそれが多くないことを望んでいます)。mutter.mo
"Maximize"
したがって、要約すると、別の(既存の)テキストドメインを使用するのは簡単ですが、問題は、必要な文字列を持つテキストドメインを見つけることです。