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 コマンド)でエラーを確認してください。