新規作成  編集  Ruby-GNOME2 Project Website  ページ一覧  検索  更新履歴  編集履歴  RSS  ログイン

libgade2-tut-l10n

Localization(L10n): 文字列の地域化

さて、仕上げにプログラムを地域化可能な構造に作り変え(国際化)、地域化の一例として日本語化します。Ruby/Libglade2を用いた場合、Glade XML(.glade)ファイル、Rubyスクリプトファイルの2種類のファイル中に現れる文字列が対象になります。

スクリプトをL10n対応させる

Rubyスクリプトの方はRuby-GetText-Package(別途gemなどからインストールが必要)を用いますので詳しくはそちらを参照してください。

最も基本的なやり方としては、Rubyスクリプト中でL10n対応にしたいリテラル文字列を引用符ごと「_(」と「)」ではさんだ形に書き換えます。

(例)

def show_opendialog
  @filedialog.action = Gtk::FileChooser::ACTION_OPEN
  @filedialog.title = _('Open Dialog')			# <= ここ
  if @filedialog.run == Gtk::Dialog::RESPONSE_OK
    if File.exist?(get_platform_filename(@filedialog.filename))
      @filename = @filedialog.filename
      read_file(@filename)
      update_window_title
    end
  end
  @filedialog.hide
end

def overwrite_file?(filename)
  dialog = Gtk::MessageDialog.new(
          @filedialog, Gtk::Dialog::MODAL,
          Gtk::MessageDialog::QUESTION,
          Gtk::MessageDialog::BUTTONS_OK_CANCEL,
          filename + _("\n already exists. Do you overwrite it?"))	# <= ここ
  result = dialog.run
  dialog.destroy
  result == Gtk::Dialog::RESPONSE_OK
end

翻訳する必要のない文字列や翻訳してはいけない文字列を指定しないように注意して下さい。

Glade XML(.glade)ファイルの方は変更の必要はありません。

rgettextによるカタログファイルのひな型(potファイル)の抽出

スクリプトの変更が済んだら、次にカタログファイル(各地域別の文字列データを格納したファイル)のひな型を作ります。Ruby-GetText-Packageに付属のrgettextというコマンドを使います。

(MS Windows)
C:\Projects\hwedit>rgettext *.glade *.rb -o .\po\hwedit.pot

(Linux/FreeBSD)
$ rgettext *.glade *.rb -o ./po/hwedit.pot

"po"ディレクトリは先に作成しておいて下さい。引数として対象となる全てのファイル(*.rb, *.glade)を指定します。"o"オプションで出力ファイル名を指定できます。

"po"ディレクトリは必ずしも作る必要はありませんが、各地域用のカタログファイルはpotファイルをコピーした上で編集して作成するため、プログラムがあるディレクトリがファイルだらけにならないように、あった方がいいと思います。

以下は生成されるpotファイルの例です。GladeでGUIを作成した時に表示用に埋め込んだ文字列(自動で設定されたものを含む)と、Rubyスクリプト中の地域化のために修正した箇所の文字列がリストされています。ただしGUIに埋め込んだ文字列のうち、プログラム実行時に自動で地域化(翻訳)されるものはリストされません。

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2008-10-27 20:36+0900\n"
"PO-Revision-Date: 2008-10-27 20:36+0900\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"

#: hwedit.glade:8
msgid "Hello World Editor"
msgstr ""

#: hwedit.glade:41
msgid "_File"
msgstr ""

#: hwedit.glade:105
msgid "_Edit"
msgstr ""

#: hwedit.glade:145
msgid "_Help"
msgstr ""

#: hwedit.glade:154
msgid "_About"
msgstr ""

#: hwedit.glade:279
msgid "About..."
msgstr ""

#: hwedit.glade:329
msgid "<span color=\"red\">hwedit - Hello World Editor</span>\n<span color=\"darkgreen\">This is a sample application for Ruby/Libglade2</span>\nRuby/Glade2 is a part of Ruby-GNOME2.\nCopyright (c) 2004 Ruby-GNOME2 Project Team"
msgstr ""

#: hwedit.rb:36
msgid "Open Dialog"
msgstr ""

#: hwedit.rb:100
msgid "\n already exists. Do you overwrite it?"
msgstr ""

hwedit.gladeからは、メインウィンドウのタイトルバーキャプション(これは結局使いませんが)、メニュー項目文字列、アバウトダイアログのタイトルバーキャプション、アバウトダイアログの内容文字列がリストされています。

ロケール別メッセージカタログ(poファイル)の作成

ここからは特定地域(言語)向けに翻訳データを作成する地域化の作業になります。

まず先ほど作成した"po"ディレクトリ直下に、poファイルをロケール別に分類するためのディレクトリ(ここでは"ja")を作成し、そこにpotファイルをコピーします。

次にコピーしたファイルをテキストエディタで開き、編集します。

まずはヘッダ部分(最初の空行までのデータ)。

"Content-Type: text/plain; charset=UTF-8\n"

"Plural-Forms: nplurals=1; plural=0;\n"

翻訳文字列を適切に表示させるために最低限編集が必要なのは、上の2行です。"Content-Type"はpoファイル自体の保存文字コードです。必要があれば、"UTF-8"を"Shift-JIS"など他の文字コード名に書き換えます。ただ今時UTF-8(N)を扱えないエディタも少ないでしょうから、普通は変える必要はないでしょう。"Content-Type"とファイル自体のコードが一致してさえいれば、プログラムの動作は変わりません。

もう一つの"Plural-Forms"は、日本語のカタログファイルを作成する場合、とりあえず上の例のように機械的に書き換えておいて下さい。詳しくはFFTT : ruby-gettextなどを参考にしてください。


後はプログラムで使用される文字列の翻訳作業になります。"msgid"とペアになっている"msgstr"に"ja"ロケールでプログラムが実行される時に表示したい文字列(翻訳)を書き込みます。

#: hwedit.glade:8
msgid "Hello World Editor"
msgstr ""

#: hwedit.glade:41
msgid "_File"
msgstr "ファイル(_F)"

#: hwedit.glade:105
msgid "_Edit"
msgstr "編集(_E)"

#: hwedit.glade:145
msgid "_Help"
msgstr "ヘルプ(_H)"

#: hwedit.glade:154
msgid "_About"
msgstr "hweditについて(_A)"

#: hwedit.glade:279
msgid "About..."
msgstr "hweditについて"

#: hwedit.glade:329
msgid "<span color=\"red\">hwedit - Hello World Editor</span>\n<span color=\"darkgreen\">This is a sample application for Ruby/Libglade2</span>\nRuby/Glade2 is a part of Ruby-GNOME2.\nCopyright (c) 2004 Ruby-GNOME2 Project Team"
msgstr "<span color=\"red\">hwedit - Hello World Editor</span>\n<span color=\"darkgreen\">Ruby/Libglade2 サンプルアプリケーション</span>\nRuby/Glade2はRuby-GNOME2に含まれています。\nCopyright (c) 2004 Ruby-GNOME2 Project Team"

#: hwedit.rb:36
msgid "Open Dialog"
msgstr "ファイルを開く"

#: hwedit.rb:100
msgid "\n already exists. Do you overwrite it?"
msgstr "\nは既に存在しています。上書きしますか?"

このような感じです。"msgid"と同じでかまわない場合は空のままでかまいません。

編集が終わったら、"Content-Type"ヘッダと同じ文字コードでファイルを保存し、ファイルの拡張子を"po"に変更します。

メッセージカタログのバイナリ化(moファイルの作成)とインストール

特定ロケール向けのpoファイルを作成したら、最後にそれをプログラムが読み込むためのバイナリ形式(moファイル)に変換し、プログラムが見つけられる場所(これから挙げるディレクトリ)に置き、地域化は終わりです。


moファイルへの変換には、Ruby-GetText-Package付属のrmsgfmtコマンドを使います。

(MS Windows)
C:\Projects\hwedit\po\ja>rmsgfmt hwedit.po -o hwedit.mo
(うまくいかない場合は、rmsgfmtを絶対パスにしてみて下さい)

(Linux/FreeBSD)
$ rmsgfmt hwedit.po -o hwedit.mo


moファイルのインストール方法ですが、ここでは、プログラムと同じ場所に置くやり方を説明します。この場合、プログラムがある場所(例えば、"C:\Projects\hwedit\")にロケール別の分類用ディレクトリも含め、"locale\ja\LC_MESSAGES\"という構成でディレクトリを作成し、"LC_MESSAGES"にmoファイルを置きます(MS Windows、jaロケールの場合。"locale"にあたるディレクトリの名前は自由ですが、普通は"locale"にします)。

このやり方で注意しなければならないのは、置き場所のディレクトリ(ここでは"locale")をプログラムのスクリプト中で指定する必要があることです。具体的には以下のようにします。

(hwedit.rb)

# Main program
if __FILE__ == $0
  # Set values as your own application. 
  PROG_PATH   = 'hwedit.glade'
  PROG_NAME   = 'hwedit'
  Hwedit.new(PROG_PATH, nil, PROG_NAME, './locale')	# <= ここ
  Gtk.main
end

Hweditをnewする時にmoファイルの置き場所を4番目の引数として指定します。この引数がないと、プログラムはmoファイルを見つけることができません。プログラムはここに指定したディレクトリ以下の場所から、"#{PROG_NAME}.mo"という名前のファイルを探します。

※ 上記のスクリプトの変更と"locale"ディレクトリの用意は、本来、国際化の作業に含まれるものだと思いますが、チュートリアルの便宜上ここで説明しました。


moファイルのインストール方法については、上のものとは別に、Rubyのインストールディレクトリ以下に置くなどのやり方があるのですが、私のMS Windowsの環境ではうまく行かなかったので省略します。詳しくは今までに挙げたウェブサイトを参考にして下さい。

更新日時:2008/11/02 13:40:28
キーワード:
参照:[libglade2-tut]