tips_i18n
日本語の扱いと国際化
Ruby-GNOME2では文字コードにUTF-8を使う。
Linux, *BSDやMS Windowsを使っていると通常はEUC-JPやShift_JIS(CP932)を使うことが多いが、Ruby-GNOME2を使って日本語を扱う時は、どのようにコーディングすれば良いのだろう。
いくつか例を挙げて説明してみる。
1 ソースコード自体UTF-8で書く
UTF-8を読み書きできるエディタを使う。最近はUTF-8をサポートしたエディタも増えてきたのであまり問題ないだろう。
なお、この場合はスクリプトの先頭の方に$KCODE='u'と書く。
#起動オプション-Kを使う方法もある。
$KCODE = 'u' require 'gtk2' ....
2 ソースコード自体はEUC-JPやShift-JISで書いて実行時にUTF-8に変換する
これも結果的には1.となんら変わりはないのだけど、UTF-8をサポートしていないエディタを使いたい場合などでは重宝すると思う。 むとうは、iconvを使って実行時にUTF-8に変換する方法を良く使う。
iconvはcygwinにもあるのでMS Windows環境でも使うことができる。とはいえ、1の方法よりは手間がかかるかな。
iconv -f euc-jp -t utf-8 hoge.rb |ruby - #ソースがEUC-JPのとき iconv -f sjis -t utf-8 hoge.rb |ruby - #ソースがShift-JISのとき
こちらも1 と同様に$KCODE='u'は指定しておく。
ただ、この方法だと、他の人にツールを配布する際に変換後のファイルを実行ファイルとして配布するようにする等ということを考えないといけない。結果的には1と同じ形で配布することになるだろう。
3 GLib.convertを使う
GLibが用意している文字コード変換関数を使う方法。EUC-JPで書いた例を以下に示す。
require 'gtk2' Gtk::Button.new(GLib.convert("了解", "utf-8", "euc-jp")) #str, to, from
この方法は、実行時に必ず変換処理が走ることやソースの見た目もあまりきれいではないので、ボタンに表示する文字等の静的な文字列に使うことはお奨めできない。
GLib.convertはむしろ、外部のデータを取得(ファイルアクセスやネットワーク経由で)したときに文字コードをUTF-8化するために使うようにすると良いのではないかな。
4 Ruby-GetText-Packageを使う
さて、ちょっとだけ話が難しくなる。いや、難しくはないのだけど。
今までの方法は、いずれにせよソースに日本語を埋め込んでしまうため、作成したアプリケーションは日本語が読めない人は使えないものになってしまう。
もちろん、日本人向けに作ったアプリケーションであればそれで良いのだけど、他の国の人にも使ってもらおうと思ったら、ソースにASCII文字以外の文字を埋め込まない方が良い。
そこで、ソースコード自体は英語ベースで作っておいて(ここが日本人にとって最大の難関であることは理解してるけど(苦笑))、変換対象の文字列はカタログファイルという別ファイルに言語別に用意するようにする。
以下に例を示す。
require 'gtk2' require 'gettext' include GetText bindtextdomain("test") Gtk::Button.new(_("OK"))
あとは、この"OK"に該当するカタログファイルを言語別に用意することになる。
この手法はカタログファイルのインストール先(通常は/usr/share/locale/#{lang}/LC_MESSAGES/)を決めなければいけなかったりして結構手間なのだけど、あおきさん作のsetup.rb,install.rbをベースに一度作りこんでしまえば後はそれほど気にならないはず。 この辺はRuby-GetText-Package自体のディレクトリ構成やインストール周りの処理が参考になると思う。
せっかく作るアプリケーションなのだから是非世界中の人に使ってもらおう。というわけで、是非、一度お試しを。
キーワード:
参照:[ライセンス診断ツール] [Ruby-GNOME2 Tips]