0

私は小さなプログラム(javascriptですが、それは重要ではないと思います)を作成していて、それに翻訳を追加しようとしています。

翻訳する必要のある文字列は、「最小化」、「最大化」、「復元」、「閉じる」などだけです。これらはすでにどこかに翻訳されているはずですよね?ウィンドウのシステムタイトルバーを右クリックすると、これらとまったく同じオプションのメニューが表示されるので(Linuxを使用しています)。

もう一度行う代わりに、これらのすでに行われた翻訳を使用できる方法はありますか(これには、翻訳のためにいつかボランティアをして喜んでいるたくさんの翻訳者を見つけることが含まれます)?

それは単に正しいgettextドメインを見つけることの問題ですか?これは私が現時点でそれを設定する方法です(それはjavascriptにありますが、これは実際には質問とは無関係です):

const Gettext = imports.gettext.domain('foobar-gettext-domain');               
const _ = Gettext.gettext;
4

1 に答える 1

0

さて、さらに考えてみると、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"

したがって、要約すると、別の(既存の)テキストドメインを使用するのは簡単ですが、問題は、必要な文字列を持つテキストドメインを見つけることです。

于 2012-07-20T01:02:53.027 に答える