GNOME Shell Extension で gettext
GNOME Shell Extension のメッセージ翻訳方法を調べてみました。
https://live.gnome.org/GnomeShell/Extensions/FAQ/CreatingExtensions
ここが元ネタですが、 ExtensionSystem がどこにあるのかわからなかったので、自前で作成します。一般的には convinience.js http://git.gnome.org/browse/gnome-shell-extensions/tree/lib/convenience.js を使うらしいので、こちらのソースを見ながら、ちょっと追加するだけで gettext してみました。
最初に
$ gnome-shell-extension-tool -c
で、雛形を作ります。
今回は sample という名前で作りました。先ほどのコマンドでエディタが開くので、
以下のコードをTweenerの下あたりにに追加します。
const ExtensionUtils = imports.misc.extensionUtils; const Gettext = imports.gettext; Gettext.textdomain("sample"); Gettext.bindtextdomain("sample", ExtensionUtils.getCurrentExtension().dir.get_child('locale').get_path()); const _ = Gettext.gettext;
次に、翻訳したいメッセージを _() で囲みます。今回は "Hello, world!" を _("Hello, world!") にするだけです。
ここから、 gettext のコマンドを使って、翻訳メッセージを作ります。
現在のディレクトリを $HOME/.local/share/gnome-shell/extensions/ 以下の自分で作成したディレクトリに移動してください。
$ pwd /home/your_account/.local/share/gnome-shell/extensions/sample@example.com $ ls extension.js extension.js~ metadata.json stylesheet.css
extension.js は、すでに _() を使って翻訳するメッセージにマーキングしていることと思います。
はじめに、 xgettext コマンドで翻訳の元となる messge.pot ファイルを作ります。
$ xgettext -k_ -kN_ -o message.pot extension.js xgettext: 警告: ファイル `extension.js' (拡張子 `js') は未知の形式なので C 言語を試します $ ls extension.js extension.js~ message.pot metadata.json stylesheet.css
xgettext の -k オプションで、 _ と N_ を翻訳するメッセージのキーワードとして指定しています。
次に、 msginit で LANG に合わせて翻訳するファイルを作成します。
$ echo $LANG ja_JP.utf8 $ msginit ユーザが翻訳に関するフィードバックをあなたに送ることができるように, 新しいメッセージカタログにはあなたの email アドレスを含めてください. またこれは, 予期せぬ技術的な問題が発生した場合に管理者があなたに連絡が取れる ようにするという目的もあります. Is the following your email address? sample@example.com Please confirm by pressing Return, or enter your email address. sample@example.com http://translationproject.org/team/index.html を検索中... 完了. A translation team for your language (ja) does not exist yet. If you want to create a new translation team for ja, please visit http://www.iro.umontreal.ca/contrib/po/HTML/teams.html http://www.iro.umontreal.ca/contrib/po/HTML/leaders.html http://www.iro.umontreal.ca/contrib/po/HTML/index.html ja.po を生成. $ ls extension.js extension.js~ ja.po message.pot metadata.json stylesheet.css
ja.po を翻訳します。
msgstr "こんにちは、世界!"
locale ディレクトリを作って、翻訳ファイルをバイナリファイルに変換してインストールします。
$ mkdir -p locale/ja/LC_MESSAGES $ msgfmt ja.po -o locale/ja/LC_MESSAGES/sample.mo $ ls -R .: extension.js ja.po locale metadata.json extension.js~ ja.po~ message.pot stylesheet.css ./locale: ja ./locale/ja: LC_MESSAGES ./locale/ja/LC_MESSAGES: sample.mo
あとは、gnome-shellを再起動(Alt + F2 r コマンド)して、パネルに歯車アイコンがあることを確認してください。ない場合は、 gnome-tweak-tool で起動してください。パネルの歯車アイコンをクリックすると、日本語のメッセージが出れば成功です。
うまく行かない場合は、Looking Glass (Alt + F2 lg コマンド)でエラーを確認してください。