タイトル今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(18)ローカライズ(1)カテゴリーユーザインタフェース, Cocoa, 今から始めるCocoaプログラミング
作成日2002/2/1 14:4:0作成者新居雅行
   この記事のPDFファイル(909KB)は以下のアドレスにあります。
   ダウンロードには、MDOnlineのアカウントが必要です。
   pdfs/MDOnline020003.pdf
 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Cocoaの大きな特徴は、アプリケーションのローカライズが考慮されているというところにある。文字列の扱いから、ユーザインタフェースの設計まで、ユーザが選択している言語に合わせて切り替えることができる。あらかじめそうした言語ごとのリソースを用意しておくことや、プログラミングへの配慮も必要となるのではあるが、いずれにしても、複数の言語に対応したアプリケーション作成は作りやすい環境となっている。こうした機能を利用する方法と、開発ツール上での効率的な使い方を説明しよう。

――――Cocoaのローカライズ対応機能
Cocoaでのローカライズ対応機能はいくつかあるが、まずいちばん目立つのは、メニューやウインドウといったユーザインタフェースの設計内容を、言語ごとに別々に定義できるということだ。つまり、英語システム向けには英語のダイアログボックス、日本語システム向けには日本語のダイアログボックスを用意しておく。そして、それらの中のコントロールは同一に扱えるようにしておき、ユーザが選択している言語に応じてあらかじめ用意されているダイアログボックスがきちんと機能するように表示されるということである。ただ、その場合、用意されていない言語はどうなるということになるだが、その場合はユーザのシステム環境設定にある設定に応じて、優先順位の高いものが表示される。全世界の言語を用意しないといけないということはないけども、少なくとも、日本語と英語のものを用意しておくというのは最低限の目標かもしれない。
ただ、こうしたリソースの2重化ということについては、問題を感じる人も多いだろう。たとえば、完全に出来上がってから、コピーをもとに別の言語のものを作るということならなんとかなるとしても、その後にダイアログボックスの中身に変更があったら、いちいち各言語のダイアログボックスを設定しなすのかということになる。だが、後で説明するように、そういう心配は必要ない。別の手段があるので、設定の変更を別の言語のダイアログボックスなどnibファイルの中身に反映させるということができる。
一方、もう1つのローカライズは、NSBundleというCocoaのクラスを使ったものだ。このクラスを利用すると、プログラムソースの中に入れ込んだ文字列を、言語設定に応じた適切なものに切り替えるということができる。たとえば、プログラムで出すメッセージは、ソース中でダブルクォーテーションを使って直接書き込むことが多いかと思うが、NSBundleの機能を使えば、たとえば、英語ユーザには「Processing」、日本語ユーザには「処理中」という表示をさせることができる。このためにはあらかじめテーブルなどを用意するのだが、簡便な方法として、Localizable.stringsというファイルを言語ごとのリソースのフォルダに用意しておき、そこから表引きさせるという方法がある。
ただ、こうしたCocoa独自の方法だけでなく、Javaの場合には、地域化リソースとして、言語ごとの文字列データなどをクラスとして持たせる機能があるので、そちらを使うという選択肢もある。なお、今回の記事では、NSBundleについては解説しないで、nibファイルの言語対応の部分だけを説明しよう。
(ここで「リソース」という単語は、Mac OSのリソースとは違って、一般的な意味での供給されるデータと言うことである。)

――――言語ごとのnibファイルを作成する
MOSAEditorでは、最初から、MainMenu.nibが存在しているが、そのnibファイルは、英語対応のものである。Project Builderでは、MainMenu.nibの項目の左に三角形があるが、それをクリックして下位の項目を表示すると、Englishという項目がでてくる。つまり、初期状態では英語のリソースだけがあるということだ。そこに日本語のリソースを追加してみよう。
まず、MainMenu.nibの項目を選択して、「プロジェクト」メニューから「情報を表示」(Command+I)を選択する。すると、パレット形式の情報表示ウインドウがでてくる。このパレットは、選択した項目のものを表示するのであるが、邪魔な場合はDockにしまうなり、消すなりしておけばよいだろう。MainMenu.nibないしはその下のEnglishが選択されていることを書くにして、情報パレットの「地域情報とプラットフォーム」のドロップダウンリストから「異なる地域情報を追加」を選択する。

◇別の弁護の追加を行う
 

すると、シートがでてくるので、追加する言語を選択するドロップダウンリストがでてくる。ここで、日本語を追加する場合には、Japaneseを選択する。

◇追加する言語を選択する
 

そうすると、Project BuilderのMainMenu.nibの下には、Japaneseという項目が追加する。つまり、MainMenu.nibに対して、EnglishとJapaneseの2つの言語のバージョンのリソースが加わったことになる。

◇日本語のMainMenu.nibが加わった
 

ここで、実際のプロジェクトのフォルダの中を必ず確認してもらいたい。プロジェクトのフォルダには、最初にいきなりMainMenu.nibがあるわけではななかった。まず、English.lprojというフォルダがあり、その中に、MainMenu.nibというファイルがある(実際にはフォルダなのだが、ファイルのように見えるものはファイルと称することにしよう)。この、「言語名.lproj」というフォルダは、Mac OS Xではいろいろなところで見られる言語に対応したリソースを分類しておくフォルダだ。
新たに、日本語のリソースを、Project BuilderにあるMainMenu.nibに付け加えたのであるが、実際に作成されるのは、プロジェクトと同じフォルダにあるJapanese.lprojというフォルダにあるMainMenu.nibというファイルである。つまり、Finderで見えるレベルでは、言語ごと別々のフォルダに同じ名前のファイルが作成されたということになる。
Project Builderでは、ファイル名の下に言語が並ぶが、実際のファイル階層では、言語ごとのフォルダの下にファイルが存在するという逆の階層になっている点は注意すべきところである。
では、ここで、Project Builderで、MainMenu.nibの下にあるJapaneseをダブルクリックして開いて見よう。すでに日本語になっている…ということを期待しつつもさすがにそこまではなっていない。将来は分からないが、Dec 2001版では、Japaneseを新たに作った場合は、この場合だとEnglishのMainMenu.nibがそのままコピーされているだけである。
ターゲットの設定では、こうして作成した各言語のnibファイルは、パッケージアプリケーションにあるResourcesフォルダにコピーされる。コピーされるのは、English.lprojフォルダでありJapanese.lprojフォルダである。これらが作成されたパッケージでどのように配置されるかもチェックしておこう。なお、言語のフォルダだけがあって、そこのMainMenu.nibファイルで正しい設定がされていないのであれば、その言語が選択されているときには、アプリケーションが全然機能しないことにもつながるので、きちんと設定していない言語リソースは削除しておくのが基本である。
(この項、続く)
関連リンク