ひだまりソケットは壊れない

ソフトウェア開発に関する話を書きます。 最近は主に Android アプリ、Windows アプリ (UWP アプリ)、Java 関係です。

まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。

Windows ストアアプリ “MeteorLine” 0.2.0.0 のソースコードを公開しました (アプリの多言語対応などの話)

MeteorLine (Windows ストアアプリ) のバージョン 0.3.0.0 のリリースをしたので、0.1.0.2 のソースコード公開 に引き続き、1 個前のバージョンである 0.2.0.0 のソースコードも GitHub で公開しました。

オープンソースソフトウェアなライセンスのもとで公開しているわけではなく、あくまで Windows ストアアプリ開発者同士のノウハウ等の共有を目的にしたものです。 使用言語は JavaScript (HTML, CSS) です。

MeteorLine ってどんなアプリ?

タイムライン形式でいろんな web サービスその他の情報を並べて表示できるアプリです。 2013 年 2 月 21 日時点の最新のリリースバージョンである 0.3.0.0 では Twitter の Home timeline と Mentions timeline の表示にのみ対応しています。 詳しくは Windows ストアのページをご覧ください:

バージョン 0.2.0.0 のソースコードの見どころ

バージョン 0.2.0.0 における変更点は以下のとおりです。

  • 多言語対応 (日本語と英語)
  • アプリの背景画像を設定できるように
  • ツイッターの Fav, RT, リプライなどができるようになったり表示方法を変更したり

ツイッター周りの変更点はまあ置いておくとして、多言語対応とアプリの背景画像を変更できるようにした部分はアプリ開発者の参考になるかもしれませんので書き残しておきます。

多言語対応

ソースコード見ても何のことやら、って感じかもしれませんが、

という感じでやっています。 多言語アプリツールキットというのは、多言語対応するための便利ツールです。

多言語アプリツールキットを使う場合も使わない場合も、既定の言語については自分でリソースファイルを作って手で JSON を書く必要があります。 リソースファイルを作って UI 用の文字列をリソースファイルに記述する方法については下記ページに書いてありますので、多言語対応する場合はまず下のページを見ながら、既定の言語のリソースファイルを記述しましょう。

既定の言語以外のリソースファイルを同じ手順で作れば多言語対応ができるのですが、複数ファイルの JSON を管理するのは割と面倒です。 そこで多言語アプリツールキットの出番です。 多言語アプリツールキットを使えば、既定の言語のリソースファイルから指定の言語のリソースファイルを自動的に作ってくれます。 (もちろん翻訳した文字列は手で入力する必要がありますが、JSON を編集するよりは楽なはず。) 多言語アプリツールキットの使い方は下記ページを見てください。

ちなみに、多言語アプリツールキットを使う場合は、既定の言語を後から変更すると多言語アプリツールキットが参照するリソースファイルが変更になってしまって、全入力値がリセットされてしまって大変なことになる気がしました *1。 なので、既定の言語選びは慎重にした方が良さそうです。 *2

背景画像を設定できるように

重要な処理は下記の 2 つのファイルで行っています。

背景画像設定の流れ

まず、ユーザーがアプリ設定の 「背景画像を設定」 ボタンを押すと、アプリ設定のページコントロールの __setBackgroundImage メソッド が呼び出されます。 そこで、ファイルピッカーが呼び出されます。 ファイルピッカーについては下記ページ参照。

ファイルピッカーでファイルが選択されると、選択されたファイルを表す StorageFile オブジェクト が返ってくるので、それを vividcode.meteorline.BackgroundImageManager#setBackgroundImage メソッド に渡します。 BackgroundImageManager#setBackgroundImage メソッドは、渡された StorageFile オブジェクトの中身を読み込み、アプリのローカルストレージにファイルとして保存します。 アプリが扱える保存領域などについては下記ページをご覧ください。

意見などあればください

こうした方がいいんじゃないかなどの意見があればください!

*1:何かうまいことできる方法があるのかもしれませんが

*2:私は日本語を規定の言語にしていますが、全世界の市場に展開するつもりなら英語を規定の言語とするのが良さそうな気がしました。