[ruby-gnome2-doc-cvs] [Hiki] update - tips_i18n

Back to archive index

ruby-****@lists***** ruby-****@lists*****
2003年 7月 8日 (火) 03:22:03 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'は指定しておいたほうが良さそう。

ただ、この方法だと、他の人にツールを配布する際に変換後のファイルを実行ファイルとして配布するようにする等ということを考えないといけない。結果的には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|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がお奨めだ。

- ((<むとう>))
-------------------------
= 日本語の扱いと国際化
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|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がお奨めだ。

- ((<むとう>))




ruby-gnome2-cvs メーリングリストの案内
Back to archive index