今回はアプリケーションを作成する上で見過ごされがちではあるのですが,
もう読者の皆さんにはおわかりのはずですね。そう,
アプリケーションを動作させることを,
そのため,
Javaで国際化を行う場合,
これに対し,
そこで,
- ロケールによる文字列の切り替え
- 埋め込み文字列のフォーマット
今回使用したサンプルのソースを含めたNetBeansのプロジェクトは下記のリンクよりダウンロードすることができます。
- NetBeansのプロジェクト
(javafx12. zip)
なお,
ロケールによる文字列の切り替え
国際化を行うに当たって,
コンボボックスで都市を選択すると,
リスト1 世界時計スクリプト
// 都市名
var cities = ["New York", "Paris", "Tokyo"];
// タイムゾーン
var timezones = [
TimeZone.getTimeZone("America/New_York"),
TimeZone.getTimeZone("Europe/Paris"),
TimeZone.getTimeZone("Asia/Tokyo")
];
// 選択項目が変更したら,デフォルトタイムゾーンを変更する
var selectedIndex: Integer = 0 on replace {
TimeZone.setDefault(timezones[selectedIndex]);
}
// 時間を表す変数
var time = new Date();
// 1秒ごとに時間を更新するためのタイムライン
Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames: [
KeyFrame {
time: 0s
action: function() {
time = new Date();
}
},
KeyFrame {
time: 1s
}
]
}.play();
Stage {
title: "World Clock"
scene: Scene {
width: 350 height: 100
content: [
SwingLabel {
translateX: 20 translateY: 13
text: "City:"
},
SwingComboBox {
translateX: 70 translateY: 7
width: 250
// 選択項目はselectedIndexに双方向バインドさせる
selectedIndex:
bind selectedIndex with inverse
items: for (city in cities) {
SwingComboBoxItem {
text: city
}
}
},
Text {
font: Font {
size: 20
}
x: 20 y: 70
// 時間表示
content: bind "{time}"
}
]
}
}
コンボボックスで都市名を選択すると,
タイムゾーンにはJavaのjava.
図1に動作例を示します。Tokyoを選択しているので,
では,
JavaFXではロケールに応じた文字列の変更はとても簡単に行うことができます。たとえば,
リスト2
text: ##"City:"
文字列の前にシャープを2つ付け足すだけです。
Javaのリソースバンドルではキーに対応した文字列をロケールによって変更させますが,
次に行うのが,
リソースファイルはデフォルトではスクリプトのファイル名に言語を付け加え,
作成したリソースファイルはスクリプトファイルと同じディレクトリに配置します。したがって,
worldClock_
リスト3
@charset "Shift_JIS";
"City:" = "都市:"
先ほど##を付けた文字列をキーとし,
また,