ruby-****@lists*****
ruby-****@lists*****
2003年 7月 8日 (火) 03:06:36 JST
------------------------- REMOTE_ADDR = 210.249.204.48 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/?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'は指定しておいたほうが良さそうです。 ただ、この方法だと、他の人にツールを配布する際に変換後のファイルを実行ファイルとして配布するようにする等ということを考えないとですね。 == 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|URL:http://ponx.s5.xrea.com/hiki/ja/ruby-gettext.html>))を使う さて、ちょっとだけ話は難しくなります。いや、難しくはないのですが。 今までの方法は、いずれにせよソースに日本語を埋め込んでしまうため、作成したアプリケーションは日本語が読めない人は使えないものになってしまうでしょう。 もちろん、日本人向けに作ったアプリケーションであればそれで良いのですが、他の国の人にも使ってもらおうと思ったら、ソースにASCII文字以外の文字を埋め込まない方が良いです。 そこで、ソースコード自体は英語ベースで作っておいて(ここが日本人にとって最大の難関であることは理解しますが(苦笑))、変換対象の文字列はカタログファイルという別ファイルに言語別に用意するようにします。 以下に例を示します。 require 'gtk2' require 'gettext' include GetText bindtextdomain("test") Gtk::Button.new(_("OK")) あとは、この"OK"に該当するカタログファイルを言語別に用意することになります。 この手法はカタログファイルのインストール先(通常は/usr/share/locale/#{lang}/LC_MESSAGES/)を決めなければいけなかったりして結構手間なのですが、あおきさん作の((<setup.rb,install.rb|URL:http://www.loveruby.net/ja/prog/setup.html>))をベースに一度作りこんでしまえば後はそれほど気にならないでしょう。この辺は((<Ruby-GetText-Package|URL:http://ponx.s5.xrea.com/hiki/ja/ruby-gettext.html>))自体のディレクトリ構成やインストール周りの処理が参考になると思います。 せっかく作ったアプリケーションですから世界中の人に使ってもらいましょう。是非、((<一度お試しください|URL:http://ponx.s5.xrea.com/hiki/ja/ruby-gettext.html>))。 == まとめ まとめるまでもありませんが、お手軽に試すなら1か2を、日本語だけがターゲットであれば1を、国際化をするなら4がお奨めです。 == ChangeLog :2003-07-07 むとう Initial release ------------------------- = 日本語の扱いと国際化 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'は指定しておいたほうが良さそうです。 ただ、この方法だと、他の人にツールを配布する際に変換後のファイルを実行ファイルとして配布するようにする等ということを考えないとですね。 == 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|URL:http://ponx.s5.xrea.com/hiki/ja/ruby-gettext.html>))を使う さて、ちょっとだけ話は難しくなります。いや、難しくはないのですが。 今までの方法は、いずれにせよソースに日本語を埋め込んでしまうため、作成したアプリケーションは日本語が読めない人は使えないものになってしまうでしょう。 もちろん、日本人向けに作ったアプリケーションであればそれで良いのですが、他の国の人にも使ってもらおうと思ったら、ソースにASCII文字以外の文字を埋め込まない方が良いです。 そこで、ソースコード自体は英語ベースで作っておいて(ここが日本人にとって最大の難関であることは理解しますが(苦笑))、変換対象の文字列はカタログファイルという別ファイルに言語別に用意するようにします。 以下に例を示します。 require 'gtk2' require 'gettext' include GetText bindtextdomain("test") Gtk::Button.new(_("OK")) あとは、この"OK"に該当するカタログファイルを言語別に用意することになります。 この手法はカタログファイルのインストール先(通常は/usr/share/locale/#{lang}/LC_MESSAGES/)を決めなければいけなかったりして結構手間なのですが、あおきさん作の((<setup.rb,install.rb|URL:http://www.loveruby.net/ja/prog/setup.html>))をベースに一度作りこんでしまえば後はそれほど気にならないでしょう。この辺は((<Ruby-GetText-Package|URL:http://ponx.s5.xrea.com/hiki/ja/ruby-gettext.html>))自体のディレクトリ構成やインストール周りの処理が参考になると思います。 せっかく作ったアプリケーションですから世界中の人に使ってもらいましょう。是非、((<一度お試しください|URL:http://ponx.s5.xrea.com/hiki/ja/ruby-gettext.html>))。 == まとめ まとめるまでもありませんが、お手軽に試すなら1か2を、日本語だけがターゲットであれば1を、国際化をするなら4がお奨めです。 - ((<むとう>))