ローカライゼーション API

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

ローカライゼーションをベースにしたWraperの実装方法の基本ステップは:

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

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

まず初めに、Wrapperのローカライゼーション方法を適用しようとしているJavaアプリケーションに、 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 documentation』 をご覧ください。

注意

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ファイルで、キーワード「getString("..")」を探すことになりますのでご注意ください。 もし他のキーワードを追加したい場合、パラメータ「-k [keyword]」で追加してください。 いかなる言語のリソースファイルは、このテンプレートをベースにします。 ある言語のリソースファイルを作成するには、次を動作させます:

メッセージ作成にxgettextを使う:
msginit --locale=ja --input=./lang/myapp.pot --output=./lang/myapp_ja.po

これは編集可能なpoファイルが生成されますので、そのpoファイルを翻訳します。 プレーンのテキストエディタやPOファイルのエディター (『poedit』や『Gtranslator』など)を使って翻訳します。

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

あなたのアプリケーション用にローカライゼーションをセットアップすれば、完了です! アプリケーションの動作に関連する設定について、さらに詳しくは [wrapper.lang]プロパティをご覧ください。