お天気ウィジェットでローカライズされたリソースを使う
お天気ウィジェットに、この前覚えた .fxproperties ファイルでローカライズする仕組みを使うようにしてみた。
(ローカライズといっても Livedoor お天気Webサービスがそもそも国内向けサービスだけど)
ちなみにこれまでは日本語の文字列を一度、native2ascii して Unicode エスケープをソースに埋め込んでいた。
なぜソースに日本語を直接埋め込むようにしなかったのかというと、NetBeans 6.5 の JavaFX プラグインを使うと、デフォルトのファイルエンコーディングでは、コンパイルできなくなってしまうから。※
まあ何にしろ .fxproperties の仕組みは使うと便利。
resources_ja.fxproperties
"WeatherFX" = "WeatherFX" "Temperature" = "気温" "Max" = "最高" "Min" = "最低" "Couldn't retrieve forecasts" = "予報を取得できませんでした" "Configure preference" = "地域の設定" "Select Area" = "地域(大分類)を選択" "Select Prefecture" = "地域(中分類)を選択" "Select City" = "地域(小分類)を選択" "About WeatherFx" = "WeatherFX について" "About Forecast" = "天気予報について"
Main.fx
... var resTitle: String; var resTemperature: String; var resTempMax: String; var resTempMin: String; var resFailure: String; var resPreference: String; var resSelectArea: String; var resSelectPref: String; var resSelectCity: String; var resAboutWeatherFX: String; var resAboutForecast: String; function run(args : String[]) { ... StringLocalizer.associate("jp.fooami.weatherfx.resources", "jp.fooami.weatherfx"); resTitle = ##"WeatherFX"; resTemperature = ##"Temperature"; resTempMax = ##"Max"; resTempMin = ##"Min"; resFailure = ##"Couldn't retrieve forecasts"; resPreference = ##"Configure preference"; resSelectArea = ##"Select Area"; resSelectPref = ##"Select Prefecture"; resSelectCity = ##"Select City"; resAboutWeatherFX = ##"About WeatherFx"; resAboutForecast = ##"About Forecast"; return widget; } ... def widget: Widget = Widget { ... // temperature 1 Text { font: regularFont; x: 10, y: 55 content: bind resTemperature fill: Color.WHITE } ...
ついでに詳細な予報を表示するテキストリンクにマウスカーソルが当てられたときに、アンダーラインを表示するように変更した。
(宮古島は暖かそう。。。)
他の修正は、Configuration 画面で地域が選択された際の処理をちょっと変更。これは javafx.ext.swing.SwingListItem の value プロパティの型が単なる文字列でなく、Object 型を格納できるので、データオブジェクトを格納するようにした。若干効率が良くなった。
お天気ウィジェット
※この解決方法は下のページに書かれている。しかし解決すると今度は NetBeans の動作が重くなってしまうらしい。現在 BUG FIX 作業中の様子。
解決方法が説明されたページ
http://gihyo.jp/dev/serial/01/javafx/0002?page=4
重くなってしまうことが書かれた id:skrb さんのエントリ(コメントにはバグレポートについて書かれている)
http://d.hatena.ne.jp/skrb/20081224