読者です 読者をやめる 読者になる 読者になる

平常運転

アニソンが好き

過去記事とかは記事一覧で見れます

gettextで多言語対応しているGIMPの「ファイル(F)」の(F)を殲滅する

いんとろ

邪悪なM$帝国の劣悪な美的感覚を継承したこんな感じの見た目が

f:id:astj:20140107161818p:plain

清涼で美麗なるMac OSの世界によく適合したこんな感じになります。

f:id:astj:20140107161829p:plain

方針

GIMPみたいにgettextを使ってローカライズしているソフトの場合、ローカライズの源になるのは/usr/share/locale/ja/LC_MESSAGES/の中にあるhogehoge.moファイル。

( GIMPの場合は正確にはGIMP.app/Contents/Resources/share/…で、MacPorts経由でインストールした場合は実体は/opt/local/share/…にある)。

なので、これを適切に弄ってやれば改善するんだけど、これはhogehoge.poファイルをコンパイルして生成されているので、元のhogehoge.poを入手してきてそれに手を加えて、またhogehoge.moコンパイルして差し替えることになる。

hogehoge.poの中で、今回問題の(F)みたいな奴は、(_F)みたいな感じで記述されているから、これを正規表現的に $_ ~= s/\(_.\)//g; で葬ってやればよい。

手順

本来、hogehoge.pohogehoge.moから逆コンパイルもできるはずなんだけど、なんかうまくいったりいかなかったりするから、素直にhogehoge.poを調達してきた方がいいんじゃないかなと思う。

まず、GIMPhogehoge.poファイルを調達するために、GIMPのソースを適当にダウンロードしてgimp-2.8.X.tgzを適当に展開する。 ちなみにMacPortsで導入した場合は、インストール時にDLしたファイルが/opt/local/var/macports/distfiles/gimp2に保存されているから、これをおもむろにダブルクリックすると手っ取り早い。

そしてこの中にあるローカライズ用のhogehoge.poを書き換えることになる。書き換えた後makeとかmake installとかすると手順はシンプルなんだけど、たかだかロケールファイルの差し替えのためにビルドするのも手間なので、丹精込めて手作業する。

GIMPの場合、/po*/ja.poが該当するファイルなので、適当に作業ディレクトリに持って行く。

$ mkdir ~/gimp_locale/
$ mkdir  ~/gimp_locale/new_files/
$ cd ~/Desktop/gimp-2.8.X/
$ cp po/ja.po ~/gimp_locale/gimp20.po
$ cp po-libgimp/ja.po ~/gimp_locale/gimp20-libgimp.po
$ cp po-plug-ins/ja.po ~/gimp_locale/gimp20-std-plug-ins.po
$ cp po-python/ja.po ~/gimp_locale/gimp20-python.po
$ cp po-script-fu/ja.po ~/gimp_locale/gimp20-script-fu.po
$ cp po-tips/ja.po ~/gimp_locale/gimp20-tips.po

ファイル名はゴールになる/opt/local/share/locale/ja/LC_MESSAGES/にあるファイルとにらめっこして決める。手作業。

んで、それぞれのファイル毎に処理を行う。1行目のperl(_.)を消して、2行目のmsgfmthogehoge.moに変換して、3行目でファイルを導入する。

$ perl -pale '$_ =~ s/\(_.\)//g; ' <  ~/gimp_locale/gimp20.po >  ~/gimp_locale/new_files/gimp20.po
$ msgfmt -o ~/gimp_locale/new_files/gimp20.mo ~/gimp_locale/new_files/gimp20.po
$ sudo cp ~/gimp_locale/new_files/gimp20.mo /opt/local/share/locale/ja/LC_MESSAGES/

めでたい。

備考

今回はperlワンライナーで無慈悲に(_.)を殲滅したけど、昔wxMaximaで同じ事をした時はローカライズの定義側にも(_.)が含まれていておかしなことになってしまったことがあった。

なので、正規表現検索/置換のできるエディタで軽く確認しながら置換した方がよさげな気もする。