Symbian OSアプリ開発の手引き

Symbian OSアプリ開発の手引き(8)

iPhone対抗!? 最新S60と無償になったCarbide.c++
〜 SDKとIDEの最新事情 〜

大久保 潤 管理工学研究所 2009/2/10

- PR -

何が作られたのか
―多言語対応のリソースファイル―

 今回作成した「メッセージ表示」という文字列リソースはどこに格納されているのでしょうか。連載第4回「Symbian流“日本語表示”と“文字列操作”」では、

<プロジェクト名>.rlsファイル

というルールでリソースを格納するファイル名が存在し、そこに文字列が保存されると説明しました。では、「Project Explorer」でプロジェクト配下の「data」フォルダを開いて、ファイルの有無を確認してみましょう。このフォルダがリソースの格納先です。


図10 リソース一覧

 「.rls」ファイルは存在せず、その代わりにいくつかの怪しいファイルが見つかります。「BlankGUI」はプロジェクト名ですね。そのプロジェクト名に対して「.rss」「.loc」「.l32」と3種類の拡張子のバリエーションが存在します。「.rss」のファイルの役割は連載第4回で説明した

「.rssファイルはリソースの論理的な構造と、C++ソースからアクセスする名前の根拠を定める」

のとおりです。

 では、「.loc」と「.l32」はどうかといえば、これが「.rls」ファイル相当の役割を担っています。ここで「BlankGUI.loc」を開いてください。

図11 「BlankGUI.loc」

 やっていることはといえば、条件コンパイルで#includeの有無を制御しているだけですが、そのフラグは看過できません。「LANGUAGE_32」とはすなわち、日本語であれば、という条件コンパイルではないですか。“32”は日本語を意味するのでしたよね(ピンとこない方は前述のTLanguageの定義をもう一度見てください)。つまり、「.loc」ファイルの役割とは、コンパイル時の言語設定に合わせてリソース実体を切り替えることであるといえます。すると、「.l32」ファイルの役割もおのずから明らかになります。こちらの方は言語別に用意されたリソースの実体を定義することがその役割です。より汎用的にルールを書けば、

「.l+<言語ごとの識別コード>」という拡張子を持つファイルは、
その識別コードで表される言語のリソースを定義する

となります。

 ただし、「BlankGUI.l32」を開いても、そこに「メッセージ表示」というリソースを見つけることはできません。

 実はこのリソース、「BlankGUIContainer.l32」の中に定義されています。そして、そのファイルの名称である“BlankGUIContainer”はこのアプリケーションのコンテナ名を意味しています。UI Designerを開くときにクリックしたコンテナ名を思い出してください(先ほどクリックしてもらったものは正確には「BlankGUIContainer.uidesign」ですが)。

 このコンテナ名に対して「.rssi」「.loc」「.l32」の拡張子を持つ3種類のファイルが存在します。「.rssi」はそのコンテナに関する分の「.rss」ファイルだと思ってください。「.loc」および「.l32」はそのコンテナから使われる言語別のリソース定義です。今回のメニュー追加は「BlankGUIContainer.uidesign」を通じて開いたコンテナに対して行いました。だから、そのコンテナの言語別リソースファイルである「BlankGUIContainer.l32」に実体が保存されるのは筋が通っていますね。

>>気を付けてほしいのは、「.l32」のファイルはUTF-8でなければならないということです(理由は連載第4回を参照)。Carbide.c++は自分自身が作ったファイルであるにもかかわらず、「.l32」のファイルがCP932であると勘違いすることがあります。「.l32」のファイルを直接開いたときに画面表示が乱れていることがあれば、そのファイルの[Properties]から文字コードを明示的に指定してください。

 このようにCarbide.c++ v2.0では「.loc」ファイルと、「.l+<言語ごとの識別コード>」ファイルを用いて多言語用のリソースを管理しています。では、従来型の「.rls」ファイルでリソースを管理したい場合、またほかの言語を追加で支援したくなった場合はどうすればよいでしょうか? 今回の締めくくりとしてその方法をお伝えします。

図12 アプリケーションのリソース設定を開く

 (1)「Project Explorer」から「application.uidesign」をクリックして開きます。すると画面中央に「Overview」とタイトルの付いた画面が出てきます。(2)その画面の下にあるタブから「Languages」を選んで表示を切り替えてください。画面上部には言語を追加するための[Add...]ボタンが、画面下部には「.locと.l+<言語ごとの識別コード>による方式」と「.rlsによる方式」を切り替えるためのラジオボタンが存在します。

 ここで言語種別を追加すると、次回のビルドからその追加された言語用のリソースも含んだインストールパッケージが生成されることになります。このようにCarbide.c++ v2.0では多言語対応アプリケーションの作成が容易に行えるようになっています。

 いかがでしたでしょうか? 今回はS60関連の新機能と、Carbide.c++の最新バージョンの紹介をしつつ、GUIアプリケーションの入り口までやって来ました。次回はさらにその先に進んで「コンテナに対するUI部品の張り付け」について解説したいと思います。お楽しみに!(次回に続く)

  • 連載バックナンバー
  • 全記事インデックス
  • 組み込み開発トップ
  • MONOistトップ

スキルアップ/キャリアアップ(JOB@IT)

スポンサーからのお知らせ

- PR -
@IT Sepcial

震災関連・復興支援情報

震災関連・復興支援情報
@IT MONOist/EE Times Japan/環境メディアの製造業技術者向け3メディアを中心に、震災関連/復興支援情報を集めました

次世代エンベデッドコーナー

次世代エンベデッド
“次世代”の組み込み機器を開発するエンジニアを支援するコーナー。新潮流・新技術をインタビューやコラム、解説記事で分かりやすく紹介!

Windows Embeddedコーナー

Windows Embedded
Windows Embedded専門コーナー。Windows Embedded StandardやWindows Embedded CEをはじめとする「Windows Embedded」ファミリの最新動向や技術情報をお届けします!!

Androidコーナー

Android
Android専門コーナー。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報がここに集結!!

@IT MONOist 求人情報

- PR -