では,
図1では
他の文字列に関しても日本語のリソースを記述してみましょう。スクリプトで##を付加する文字列として,
リスト4
// 都市名
var cities = [##"New York", ##"Paris", ##"Tokyo"];
...
Stage {
title: ##"World Clock"
...
これに対応して,
リスト5 worldClock_
@charset "Shift_JIS";
"City:" = "都市:"
"World Clock" = "世界時計"
"New York" = "ニューヨーク"
"Paris" = "パリ"
"Tokyo" = "東京"
これだけで日本語に対応することができました。さっそく実行してみましょう。
ここでは通常の文字列しか扱いませんでしたが,
このように簡単に各国語に対応できることはわかりました。しかし,
また,
このような場合,
ここでは,
リスト6
// 都市名
var cities = [
##[NY]"New York",
##[PR]"Paris",
##[TK]"Tokyo"
];
"New York"の文字列に対応するキーは"NY"とし,
リソースファイルはリスト7のようになります。
リスト7
@charset "Shift_JIS";
"City:" = "都市:"
"World Clock" = "世界時計"
"NY" = "ニューヨーク"
"PR" = "パリ"
"TK" = "東京"
実行結果は図4と同じなので示しませんが,
スクリプトとリソースファイルの結びつけ
デフォルトでは1つのスクリプトファイルにつき,
そこで,
StringLocalizerクラスにはassociate関数とdissociate関数が定義されています。associate関数がスクリプトとリソースファイルの結びつけ,
associate関数はオーバロードされており,
ここでは,
この変更に伴うスクリプトの変更は,
リスト8
// スクリプトファイルとリソースファイルを結びつける
StringLocalizer.associate("resources/worldClock", "", "worldClock.fx");
associate関数の第1引数がリソースファイルの場所を示しています。実際のリソースファイル名はresources/
また,
リスト9
var cities = ["New York", "Paris", "Tokyo"];
var localizer = StringLocalizer { key: cities[0] }
println("New York: {localizer.localizedString}");
localizer.key = cities[1];
println("Paris: {localizer.localizedString}");
localizer.key = cities[2];
println("Tokyo: {localizer.localizedString}");
StringLocalizerオブジェクトのkeyアトリビュートにキーとなる文字列を指定すると,