今回のサンプルは、er.extensions.ERXLocalizerです。
このクラスは、クライアントのロケールを特定し、そのロケール用のメッセージ、プロパティを取得、利用するためのクラスです。
適切に設定を行えば、ERXSession.java のlocalizer変数にクライアントのロケール用の情報を格納したERXLocalizerのインスタンスが格納されるので、
(Project Wonder用の設定をするば、ERXSession.java はSession.javaの親クラスになっているはずです。)
session.localizer.hoge.hoge
といった具合に、KeyValueCodingで指定のプロパティに容易にアクセスすることができるようになります。
このクラスを使用するには、プロジェクトのPropertiesファイルにローカライズ用の設定を加える必要があります。
以下はPropertiesファイルの設定サンプル(一部)です。
#er.extensions.ERXLocalizer.pluralFormClassName =
er.extensions.ERXLocalizer (実際には1行で書く)
#er.extensions.ERXLocalizer.nonPluralFormClassName =
er.extensions.ERXNonPluralFormLocalizer (実際には1行で書く)
er.extensions.ERXLocalizer.defaultLanguage = Japanese
er.extensions.ERXLocalizer.availableLanguages =
(English,German,Japanese) (実際には1行で書く)
er.extensions.ERXLocalizer.frameworkSearchPath =
(app,ERExtensions,HogeBusinessLogic) (実際には1行で書く)
er.extensions.ERXLocalizer.fileNamesToWatch=
("ERXLocalizerLocalize.string",
"ERXLocalizerLocalize2.string") (実際には1行で書く)
それでは、サンプルの設定を順番に見ていきます。
サンプル中ではコメントアウトしてある以下の指定は、カスタムなクラスでERXLocalizerを置き換えたい時に使用します。
キーの値としては、クラス名を指定します。
er.extensions.ERXLocaler.pluralFormClassName
er.extensions.ERXLocalizer.nonPluralFormClassName
er.extensions.ERXLocalizer.defaultLanguage
er.extensions.ERXLocalizer.availableLanguages
この2つの指定は、キーの名前だけで、なんとなく意味が分かるでしょう。
ERXLocalizerのデフォルトのロケールの言語と、使用可能とする言語の種類を、このプロパティのキーで指定します。
er.extensions.ERXLocalizer.availableLanguages はリスト型の値で指定します。
注意するべきは、残りの2つの指定です。
これらを適切に指定しないと、ERXLocalizerはプロパティファイルを読み込んでくれません。
er.extensions.ERXLocalizer.frameworkSearchPath
er.extensions.ERXLocalizer.fileNamesToWatch
er.extensions.ERXLocalizer.frameworkSearchPath
プロパティファイルの入っているフレームワーク名をリスト型の値で指定します。
実行アプリのプロジェクトにプロパティファイルが入れられている時は、サンプルのように"app"を指定します。
フレームワークの指定の順番は気にしなくても大丈夫です。
Project Wonderを使用するのでERExtensionsフレームワークは必ず入れておきましょう。
er.extensions.ERXLocalizer.fileNamesToWatch
読み込むプロパティファイルの名前をリスト型で指定します。
このプロパティで指定しないプロパティファイルは、ERXLocalizerによって読み込みません。
説明は終わりです。
これで、ERXLocalizerは使えるものと思います。
最後に、簡単なERXLocalizerのサンプルコード(一部)をお見せします。
File: ERXLocalizerSample.java
import com.webobjects.foundation.*;
import com.webobjects.appserver.*;
import com.webobjects.eocontrol.*;
import com.webobjects.eoaccess.*;
public class ERXLocalizerSample extends WOComponent {
public NSMutableDictionary _wotemp = new NSMutableDictionary();
public ERXLocalizerSample(WOContext context) {
super(context);
}
}
File: ERXLocalizerSample.wo/ERXLocalizerSample.html
<HTML>
<BODY BGCOLOR="#FFFFFF">
String: <WEBOBJECT NAME=String1></WEBOBJECT> <BR>
<WEBOBJECT NAME=Repetition1>
Repetition: <WEBOBJECT NAME=String2></WEBOBJECT> <BR>
</WEBOBJECT>
<BR>
Dictionary: <BR>
[title] <WEBOBJECT NAME=String3></WEBOBJECT> <BR>
[value] <WEBOBJECT NAME=String4></WEBOBJECT> <BR>
[value2] <WEBOBJECT NAME=String5></WEBOBJECT> <BR>
</BODY>
</HTML>
File: ERXLocalizerSample.wo/ERXLocalizerSample.wod
Repetition1: WORepetition {
item = wotemp.item;
list = session.localizer.listkey;
}
String1: WOString {
value = session.localizer.strkey;
}
String2: WOString {
value = wotemp.item;
}
String3: WOString {
value = session.localizer.dictkey.title;
}
String4: WOString {
value = session.localizer.dictkey.value;
}
String5: WOString {
value = session.localizer.dictkey.value2;
}
File: English.lproj/ERXLocalizerLocalize.string
{
strkey = "string type of property";
}
File: Japanese.lproj/ERXLocalizerLocalize.string
{
strkey = "文字列型プロパティ";
}
File: English.lproj/ERXLocalizerLocalize2.string
{
dictkey = {
title = "dictionary type of property: title";
value = "dictionary type of property: value";
value2 = "dictionary type of property: value2";
};
listkey = (
"list type of property: 1",
"list type of property: 2",
"list type of property: 3",
);
}
File: Japanese.lproj/ERXLocalizerLocalize2.string
{
dictkey = {
title = "辞書型プロパティ: titleキー";
value = "辞書型プロパティ: valueキー";
value2 = "辞書型プロパティ: value2キー";
};
listkey = (
"リスト型プロパティ: 1番目",
"リスト型プロパティ: 2番目",
"リスト型プロパティ: 3番目",
);
}
本日は以上です。
今回作成したサンプルコード
ERXLocalizer.tar.bz2




