Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

SimpleGetText.rb

$(apollo)/lib/lang/SimpleGetText.rb

cvsの最新版を見る

SimpleGetText クラス

String#get_text メソッド

String#_ メソッド(get_text の alias)

を定義する。全体として SimpleGetText システムと呼ぶことにする。

SimpleGetText システム

SimpleGetText (jp)

超簡単な多言語化モジュールです。

使い方は次の通り:

例として、 c:/dir/hello.rb というスクリプトを多言語化してみます。これを「ターゲットスクリプト」と呼ぶことにします。

#-- hello.rb
p "hello SimpleGetText!"

実行時の言語は日本語であるとします。日本語のローケールIDは「ja」です。

多言語化の手順は次のとおりです。

(1)多言語化したいスクリプトの先頭(最初の文字列の実行の前)で SimpleGetText を require する。

(2)多言語化したいメッセージの後に、「._」を付ける。

#-- hello.rb
require "SimpleGetText"
p "hello SimpleGetText!"._

(3)ターゲットスクリプトを実行し、終了する。

ターゲットスクリプトを終了すると(※1)、データファイルが作成されます。

作成されるデータファイルの場所はターゲットスクリプトのディレクトリのlocaleサブディレクトリです。なければ自動的に作成されます。

データファイルの名前は「ファイル名+"_"+ローケールID」となります。

ターゲットスクリプトが c:/dir/foo.rb であれば、 c:/dir/locale/foo.rb_ja というファイルが作成されます。

※1 Apolloから実行して、スクリプト終了後にApollo窓が出た場合には、apollo.exeも終了する必要があります。

(4)データファイルを編集する。

自動作成されたデータファイルは次のようになっています。

#
# If you translated this file,
# please mail this to the author 'project apollo'
# mailto: apollo-talk@lists.sourceforge.jp
# url:    http://lists.sourceforge.jp/cgi- bin/mailman/listinfo/apollo-talk
#
class SimpleGetText
  JA = {
 "Hello! SimpleGetText!" => "Hello! SimpleGetText!",
  }
end

データファイルの中身はハッシュのリテラルです。ハッシュの値(右辺)をその言語用に書換えれば完成です。

class SimpleGetText
  JA = {
 "Hello! SimpleGetText!" => "こんにちは! SimpleGetText の世界へ!",
  }
end

 このデータファイルをセーブして、ターゲットスクリプトを実行してみます。

すると、日本語化されたことが分かるでしょう。

G:\Apollo\TkUtils>ruby -Ks hello.rb
"こんにちは! SimpleGetText の世界へ!"

ご注意

最初の実行時にデータを作成します。

現在のバージョンでは実行された部分の文字列しかデータファイル化されません。

実行されればデータファイルに追加されていきます。

スクリプトの実行終了時にデータをセーブします。

Apolloから実行して、スクリプト終了後にApollo窓が出た場合には、apollo.exeも終了する必要があります。

ヒアドキュメントの場合

ヒアドキュメントの場合には先頭の区切り文字列に「._」を付けます。

# p <<MMMM
#   bonjour
# MMMM

p <<MMMM._
  bonjour
MMMM

式展開はNG。 String#% メソッドを使う必要があります。

式展開はうまく使えません。

式展開はリテラルなので、SimpleGetText に処理が渡る前に展開されてしまいます。

#! ruby -Ks
require "SimpleGetText"
who = "take_tk"
p( "Hello, #{who}"._ )

のデータファイルは次のようになってしまいます。これだと、式展開が展開された後の文字列ごとにデータを作成しなくてはならなくなります。

"Hello, take_tk" => "Hello, take_tk",

String#% をお使いください。

#! ruby -Ks
require "SimpleGetText"
who = "take_tk"
p( "Hello, %s"._ % [who])  #=> "こんにちは、 take_tk さん"
# "Hello, %s" => "Hello, %s",
 "Hello, %s" => "こんにちは、 %s さん",

日本語文字コードの自動変換

データファイルの記述文字コード

データファイルは kconv でコンバートされます。sjisでもEUCでもどちらでもOKです。

【データファイルはsjisでもEUCでもOK……EUCの場合】

G:\Apollo\TkUtils>type locale\hello.rb_ja
#
# If you translated this file,
# please mail this to the author 'project apollo'
# mailto: apollo-talk@lists.sourceforge.jp
# url:    http://lists.sourceforge.jp/cgi- bin/mailman/listinfo/apollo-talk
#
class SimpleGetText
  JA = {
 "Hello! SimpleGetText!" => "、ウ、?ヒ、チ、マ。ェ SimpleGetText 、ホタ、ウヲ、リ。ェ",
  }
end
G:\Apollo\TkUtils>ruby hello.rb
"\244\263\244\363\244\313\244\301\244\317\241\252  SimpleGetText \244\316\300\244\263\246\244\330\241\252"
G:\Apollo\TkUtils>ruby -Ks hello.rb
"こんにちは! SimpleGetText の世界へ!"

【データファイルはsjisでもEUCでもOK……sjisの場合】

G:\Apollo\TkUtils>type locale\hello.rb_ja
#
# If you translated this file,
# please mail this to the author 'project apollo'
# mailto: apollo-talk@lists.sourceforge.jp
# url:    http://lists.sourceforge.jp/cgi-bin/mailman/listinfo/apollo-talk
#
class SimpleGetText
  JA = {
 "Hello! SimpleGetText!" => "こんにちは! SimpleGetText の世界へ!",
  }
end
G:\Apollo\TkUtils>ruby hello.rb
"\202\261\202\361\202\311\202\277\202\315\201I SimpleGetText \202\314\220\242\212E\202\326\201I"
G:\Apollo\TkUtils>ruby -Ks hello.rb
"こんにちは! SimpleGetText の世界へ!"

Ruby1.6では -Ks はメインスクリプトでのみ使用可能。データファイルもメインスクリプトの指定の影響を受ける。

ローケール取得の方法

ローケールのデータはWindowsの設定から取得します。 SimpleGetText#locale= でセットすれば、Windowsの設定を無視してその言語用のローケールデータファイルが作成されます。

SimpleGetText クラス(class)

クラスメソッド(class methods)

save

(en) to save locale date file. By default, data file is saved automatically at the time of termination of the script.

(jp) ローケールデータファイルをセーブします。デフォルトでは、新規のデータを作成した場合に自動的にセーブします。

package
package=(v)

(en) to get/set package name. By default, package name is the same as $0.

(jp) パッケージ名を指定する。 パッケージ名はデフォルトでは起動スクリプトファイル名($0)になります。 パッケージ名を指定することにより、データファイルを共有することができます。

get_text( str )

(en) Convert ruitine which is called by String#_

(jp) String#_ から呼ばれる変換ルーティンです。

locale
locale=(v)

(en) to get/set locale id. By default, loacle id derived from the configuration of Windows.

(jp)言語ID("ja")をセットします。デフォルトではWindowsの設定から取得します。

String クラスへのメソッドの追加

String#get_text

String#_

(en) SimpleGetText add a method String#_ which calls SimpleGetText#get_text.

(jp) String#_ メソッドが追加されます。

Last modified:2004/12/14 19:08:09
Keyword(s):
References:[SimpleGetText] [SimpleGetText.rb] [雑談]