ローカライゼーション API

Wrapper バージョン 3.5.0 から、コードベースが国際化され、ローカライズが可能になりました。 Wrapper の国際化およびローカリゼーション方式を使用すると、ほとんどコーディングを必要とせず、 Java アプリケーションをローカライズするためにも利用できます。

Wrapper ベースのローカリゼーションを実装するための基本的な手順は次のとおりです。

あらゆる OS 上で配布がサポートするあらゆる言語にアプリケーションをローカライズすることができます。 現在のところ、日本語、スペイン語、ドイツ語、フランス語、ロシア語、中国語、韓国語、イタリア語、 ポルトガル語、オランダ語、デンマーク語、ハンガリー語、ヒンズー語、ギリシャ語、アラビック語、ローマ語、ウクライナ語、トルコ語、 マレー語が可能です。 (もしご希望の言語が不足していたら、次回のリリースに含めますので、弊社までご連絡ください)

1.[WrapperResources]インスタンスを追加する

Wrapper のローカリゼーション方法を利用するには、WrapperResources インスタンスを追加する必要があります。 最も推奨される方法は、WrapperResources インスタンスを保持する静的変数をプロジェクトの 一意のクラスに配置し、静的「getter」メソッドを作成することです。 この方法では、プロジェクトのクラスが WrapperResource にアクセスし、メッセージをローカライズできます。 getter メソッドでは、WrapperManager.loadWrapperResources(java.lang.String, java.lang.String) を呼び出して WrapperResource クラスを作成できます。

静的 WrapperResource インスタンスと getter メソッド
private static WrapperResources m_res;

public static WrapperResources getRes()
{
    if ( m_res == null )
    {
            // Synchronize and then recheck to avoid this method always synchronizing.
            synchronized( Unique.class )
            {
                if ( m_res == null )
                {
                    m_res = WrapperManager.loadWrapperResources( "myapp",
                        WrapperSystemPropertyUtil.getStringProperty( "wrapper.lang.folder", "../lang" ) );
                }
            }
    }
    return m_res;
}

最初の「WrapperManager.loadWrapperResources()」パラメータは、 ドメインです(例:Wrapper がリソースファイルのロード(読み込み)の試みをする名前です)。 例えば、上記の getter なら、Wrapper は [wrapper.lang.folder]プロパティで指定された配置場所から、 「myapp_XX.mo」(XXは言語の略語)ファイルの読み込みを試みます。 もし、このプロパティが設定されていない場合、「../lang」から読み込みを試みます。

2. ローカライゼーション用のメッセージフラグ

ローカライズするすべてのメッセージにフラグを設定することは、ローカライゼーションを設定する過程で最も時間のかかる部分でしょう。 プロジェクトを確認し、メッセージを[getString()]メソッドでラップする必要があります。

標準的な getString 例:
System.out.println( Unique.getRes().getString( "A test message." ) );

出力に変数を入れる必要がある場合は、 [getString(java.lang.String, java.lang.Object[])] メソッドをご利用ください。 すべての変数はオブジェクト配列に格納されます。 便宜上、WrapperResources は5つのオブジェクトまでいくつかの Wrapper メソッドを提供します。

2つの変数で getString 例:
int number = 2;
String msg = "test";
System.out.println( Unique.getRes().getString( "A {0} message with {1} variables.", msg, number ) );

getString()]メソッドの最初のパラメータでは、様々なフォーマットを定義することができます。 さらに詳しくは、 『java.text.MessageFormat 解説ページ』 をご覧ください。

注意

Java バージョン 1.6 より下位のものでは、プリミティブ型(int, boolean, float, など)を オブジェクトに投じることはできませんので、ご注意ください。 その場合、それに相当する Wrapper クラス(java.lang.Integer、java.lang.Boolean、java.lang.Float、など)の利用をご検討ください。

3. mo ファイルの作成と準備

Wrapper ローカリゼーションの過程のレイアウトは、GNU gettext に似ています。 従って、最も簡単な方法は、xgettext を使用してメッセージリソーステンプレートを作成することです。

xgettext を使用して、メッセージリソーステンプレートを作成する:
xgettext -d myapp -o ./lang/myapp.pot [project source files]

これにより「pot」ファイルが作成されます。 Java ファイルの場合、xgettext はキーワード「getString("..")」を検索することに注意してください。 もし他のキーワードを追加したい場合、パラメータ「-k [keyword]」で追加してください。 どの言語のリソースファイルもこのテンプレートに基づいています。 すべての言語のリソースファイルは、このテンプレートをベースにします。 特定の言語のリソース ファイルを作成するには、下記を実行してください。

xgettext を使用してメッセージリソースを作成する:
msginit --locale=ja --input=./lang/myapp.pot --output=./lang/myapp_ja.po

これにより編集可能な po ファイルが生成されますので、そのpoファイルを翻訳します。 プレーンテキスト エディターまたは po ファイル用エディター (『poedit』や『GNOME Translation Editor』など)のいずれかを使用して翻訳できします。

翻訳が完了したら、po ファイルを(poファイル編集ソフト や msgfmt で)コンパイルすると、 バイナリ mo ファイルが生成されます。 作業完了後、まだ行っていない場合は、 mo ファイルをWrapper の他の mo ファイルで置き換えます。 これでアプリケーションがローカライズされます。

アプリケーションのローカリゼーション設定が完了しました。 アプリケーションの動作に関連する設定について、さらに詳しくは [wrapper.lang]プロパティをご覧ください。