mikutterの最新の情報は、mikutter blogに引っ越しました。

2013年7月20日土曜日

プラグインの多言語化について

mikutter 0.3からは、プラグインを別の自然言語に対応することができるようになりました(以下、このエントリでは自然言語を「言語」と略します)。あるテキストのある言語訳を用意しておけば、日本語がわからない人でも設定が見やすくなったりします。多分mikutterの設定は、英語圏の人とかには私達が韓国語とか群馬語を見た時のような絶望感を与えているのでしょうから、思いやりがあるならやったら徳が上がるとおもいます。

やりかた
_
ローカライズしたい文字列は、Rubyソースコードの中で _ メソッドで囲ってください。これはプラグインのメソッドです。RubyのKernelにはエクスポートしてないので気をつけてください。大規模プラグインなどでどうしても外から _ メソッドを使いたい場合は、「Plugin[:slug]._」とかしたらいいんじゃないでしょうか。

これにはRuby-Gettextというパッケージを使っています。他のメソッドについて知りたい場合は、以下のWebページを参考にするか、先生に聞きましょう。

Ruby-GetText-Package開発手順 http://www.yotabanana.com/hiki/ja/ruby-gettext-howto.html

spec

国際化については、0.3から導入される uitranslator というプラグインが担当しています。国際化されたプラグインの依存関係リストには、 uitranslator を必ず入れておかなければいけません。
例えば、gtkプラグインのspecファイルは以下のようになっています。

---
slug: :gtk
depends:
  mikutter: '0.2'
  plugin:
  - gui
  - uitranslator
version: '1.0'
author: toshi_a
name: Gtk2
description: Gtk2を使ってウィンドウを描画する

potファイルの生成
次に翻訳ファイルのテンプレートを生成します。以下のようなコマンドを実行しましょう。
$ mikutter makepot
インストールされているプラグインの中で、specファイルにuitranslatorへの依存が明記してある各プラグインのディレクトリに po というディレクトリが生成され、「プラグインスラッグ.pot」というファイルが生成されます。

翻訳
各言語への翻訳を書く po ファイルを生成します。ここでは英語にしてみましょう。翻訳したいプラグインのルートに移動して、以下のコマンドを実行します。
$ mkdir -p po/en
$ LANG=en_US msginit -i プラグインスラッグ.pot -o po/en/プラグインスラッグ.po
英語の言語ファイルが出来ました。 po ファイルは専用のエディタがたくさん有ります。編集方法はここでは省きます。
この po ファイルは、そのプラグインにのみ影響を及ぼします。同じ文字列に対して別のプラグインで別々の訳を設定していても問題ありませんし、お互いが干渉することはありません。

起動
言語ファイルを作成したロケールで mikutter を起動してみましょう。うまいかんじに翻訳されていたら成功です。
うまくいかなかったら、 core/plugin/gtk/ 以下を参考にしてみましょう。くだらないサンプルが入っています。あとは、poをコミットしておけば、その言語の話者がpullしたあとはいい感じに翻訳されるでしょう。potは入れる必要は無いでしょう。翻訳者にしか

こまかいこと
moファイルは?
~/.mikutter/cache/uitranslator/ 以下にあります。poファイルがここのmoファイルより新しいか存在しない場合に自動生成されるので、配布するプラグインに添付する必要はありません。

標準プラグインの翻訳
標準プラグインも全く同じ方法で翻訳します。

もとの言語
ソースコードに書く翻訳元のキーは、通常は英語ですが、標準プラグインでは日本語を採用しています。理由は私が日本人だからです。あなたの母語が日本語でないなら、配布するプラグインが日本語をベースにしないことを私は止めません。
しかし、あらゆるドキュメントを難読化し、10年以上に渡って私を苦しめ続けている英語を私が許す日は来ないでしょう。彼らも私達と同じ人間なのですから、同じ苦しみを共有したいんです。そうやってみんなで一緒に苦しみましょう。世界平和。

コアの翻訳
未実装です。どうしましょうね。ただし、GUIはすべてプラグインなので、このことが直ちに問題になることはないでしょう。コンソールに英語が出ちゃうだけです。

実際に国際化をやってみたい
現在、これらの機能はdevelopブランチのみで有効ですので、とってきてください。また、uitranslatorプラグインもdevelopにしかないので、国際化したプラグインは0.2.2以前では動作しないので注意しましょう。

標準プラグインの翻訳に参加したい
私は日本語以外は書けないので、各プラグインの翻訳をやってくれる人がいないとどうしようもないです。近いうちにここで詳細を発表します。名乗りを上げてくれている人もいるので、なんとかなりそうです。



mikutterは単純なアプリケーションとは事情が違い、プラグインはそれぞれがほとんど独立したアプリケーションみたいなものです。そのため単一の言語ファイルを使うのでは都合が悪く、何をお手本にすべきかというところから設計が始まり、とりあえず形になったので、このまま走りだしてみようという段階です。翻訳者と相談していく中で色々変わるかもしれません。せっかくこういうことをやるので、海外にもユーザが少しくらい出てくればいいですね。そしてソースに散りばめられた日本語を見て彼らは何を思うのでしょうか。リリースが楽しみです。