GNOME Seed + Glade GUI + gettext

Glade で作った GUI 用のファイルを使って、GUIプログラムを作ってみました。
po/POTFILES.in に

[encoding: UTF-8]
[type: gettext/glade]data/hello_seed_gui.ui
src/main.js

を追加して、 src/Path.js.in という Path を調べるスクリプトを追加して、

function getprefix () {
        return "@prefix@";
}

function getdatarootdir () {
        datarootdir = "@datarootdir@/@PACKAGE@";
        return datarootdir.replace (/\$\{prefix\}/, this.getprefix());
}

GUI 用のファイルを data/hello_seed_gui.ui に追加して、

<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <!-- interface-requires gtk+ 3.0 -->
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <signal name="destroy" handler="on_destroy" swapped="no"/>
    <child>
      <object class="GtkButton" id="button1">
        <property name="label" translatable="yes">Hello</property>
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">True</property>
        <property name="receives_default">True</property>
        <property name="use_action_appearance">False</property>
        <signal name="clicked" handler="on_clicked" swapped="no"/>
      </object>
    </child>
  </object>
</interface>

そして、 src/main.js を以下のように書き換えて、

#!/usr/bin/env seed

gettext = imports.gettext;
_ = gettext.gettext;

I18N = imports.I18N;
I18N.init_gettext();

const Gtk = imports.gi.Gtk;
const GtkBuilder = imports.gtkbuilder;

Path = imports.Path

Gtk.init(Seed.argv);
builder = new Gtk.Builder();
builder.add_from_file(Path.getdatarootdir() + "/hello_seed_gui.ui");
handler = {on_destroy:function(){Seed.quit();},
	on_clicked:function(){Seed.print(_("Hello Seed"));}};
builder.connect_signals(handler);

window = builder.get_object("window1");
window.show_all();

Gtk.main();

後は、Makefile.am や configure.ac を適宜修正し、 po/ja.po を編集しただけです。 ja.po を編集する前には、

$ intltool-update ja

してください。

どうせ、 Path.js を作るなら、 I18N.js.in ではなくて、 I18N.js で作ればよかったかな?と思います。

これから GSettings を使って、 dconf で保存される設定の読み込みなどを行う方法を調査しようと思っています。