┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃Q.オンラインショップで本を買っても送料無料ってホント? ┃今すぐ購入
┃A.本当です!【楽天ブックス】では送料無料でばんがります!┃ ↓
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ↓
http://px.a8.net/svt/ejp?a8mat=BZFSP+3GFM7M+1N6+61C2R
はじめてのMac OS X Cocoaプログラミング の購入はこちら
http://px.a8.net/svt/ejp?a8mat=BZFSP+3GFM7M+1N6+61Z82&i=4898143156
リクエストがありましたので、「今から始めるCocoaプログラミング」の、昨年末からのシリーズは、近々PDF化したいと思います。このシリーズも、MOSAのセミナーで話した内容をもとに、しっかりと順序立てて説明をしたつもりですが、えらく長くなってしまいました。私のメモでは、NSBundleの補足、Dock連動、印刷、検索機能の組み込み、AppleScript対応あたりが項目として挙げているのですが、どこまで行けるかは未知数です。今後は、歩みがのろくなるか、連続性はなくなるかもしれません。できれば、Viewを知るシリーズというのを考えているのですが、それも勉強しながらということになります。Cocoaはテーマがいっぱいあって、ネタはつきることはないのですが、その気になってチェックするとけっこういろんな機能が出るわ出るわって感じです。
というわけで、このところは、あまりネタがありません。2月になってしまいますが、だいたい「ニッパチ」ってのは確かにあって、売上もいちばん落ち込む季節になります。昨年まではMacworldが日本であるので大騒ぎだったんですけど、今年は来月になりましたし。週明けくらいに、期限切れアカウントの更新などを行いますので、1月で期限切れの方でまだお支払いがなく継続をご希望される方は、お早めにお願いします。郵便振り替えの場合には間に合わないので、ご一報下さい。
ところで、PDF化をなんとか自動化しようとしたのですけど、WordのVisual Basicではどうしてもだめなことが分かりました。そういう部分までスクリプト処理ができればいいんですけど、VBもAppleScriptでもだめです。PDF作成は手作業になるのですが、PDFファイルの作成だけはスクリプトで行って、手でコピーして印刷ダイアログでファイルに出力するようにして…ということになっています。ところで、Wordで印刷を行うのに、PrintOutというメソッドがあるのですけど、解説に「QuickDraw GX」のみで使えるオプションがあり、まだしっかり解説が残っています。まあ、当然、Xではどうしようもないのでしょうけど、そういうパラメータを入れた限りは、VBの仕様からしてなくしてしまうわけにもいかず、いつまでも残ってしまうということでしょうね。こんなところでGXが健在だとは意外でした(笑)。
(新居雅行 msyk@mdonline.jp)
WebObjects 5.1に対応したJavaDocによるドキュメントが配付されている。ソフトウエア・アップデートでのダウンロードに対応しており、サイズは4.1MBである。ダウンロードすると、Developrディレクトリ内に展開されるが、以下のドキュメントを開くのが早いだろう。WebObjectsは、Javaで構築されていながら、ドキュメントは従来の形式のままであった。JavaのプログラマにとってはJavaDoc形式が慣れているだけに、JavaDoc形式のドキュメント配付は望まれていたものであった。
/Developer/Documentation/WebObjects/Reference/index.html
カテゴリ:WebObjects
この記事の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ファイルで正しい設定がされていないのであれば、その言語が選択されているときには、アプリケーションが全然機能しないことにもつながるので、きちんと設定していない言語リソースは削除しておくのが基本である。
(この項、続く)
カテゴリ:ユーザインタフェース, Cocoa, 今から始めるCocoaプログラミング
――――言語ごとのリソースを管理する
それでは、JapaneseのMainMenu.nibの英語になっている項目を1つ1つ手作業で日本語化するということもあるわけだが、それではあまりに非効率的だ。そこで、nibtoolというコマンドを使って作業を行なう。考え方は次の通りだ。まず、Englishをマスターとなるものとする。そして、マスターの中にある定義を、別途用意したテーブルをもとに変換をして、新たな定義を作成する…という具合の動作を行う。
nibtoolは、Developer Toolsのインストールによって、/usr/binディレクトリにコピーされるので、通常はコマンド名はそのまま利用できるはずだ。まず、このnibtoolを使って、変換テーブルのひな形を作る。ここでは、MOSAEditorのプロジェクトのフォルダをカレントフォルダにしておく。つまり、English.lprojやJapanese.lprojがあるフォルダをカレントしてにおくということだ。そして以下のようなコマンドを入力した。
% nibtool -L English.lproj/MainMenu.nib > menu.strings
ここでは、nibtoolのオプションとして、-Lがあり、出力結果をリダイレクトしている。この、-Lというオプションは、その後のnibファイルから、ローカライズすべき文字列を取り出して、テーブル形式で一覧するという機能を持っている。結果は標準出力に出すのだが、この状態では、プロジェクトのフォルダに、menu.stringsという名前のファイルを出力することとなる。そのファイルをエディタで見てみると次の通りだ。
◇-Lオプションで作成されたmenu.stringsファイル
コメントを除くと、メニューやダイアログボックスにある項目名が、イコールの左右に並んでいる。ここで、英語のリソースをもとに日本語のリソースを作るとすれば、次のように、イコールの左側はそのままにして、イコールの右側に日本語の文字列に入れ替える。ここでは作業をJeditでやっているが、ファイルはShift-JISで保存してよさそうだ。
◇対応表を日本語で書き換える
もちろん、全部の項目について、“日本語化”する必要がある(のだが、以下の説明は一部さぼっている。お許し頂きたい)。こうして、英語リソースを日本語リソースに変更する対応表ができた。続いて、次のようにコマンドを入力してみよう。もちろん、プロジェクトのフォルダがカレントになっている状態で入力する。
% nibtool -d menu.strings -W Japanese.lproj/MainMenu.nib English.lproj/MainMenu.nib
ここでは、nibtoolコマンドについて、-dと-Wのオプションがあるということになる。そして、一番最後のパラーメタであるEnglish.lproj/MainMenu.nibが元のリソースである。-dは変換テーブルの定義されたファイルを指定する。そして、-Wオプションは変換結果を書き出す先だ。つまり、English言語のMainMenu.nibを読み取り、menu.stringsの結果に照らし合わせて文字列の置換をしたものを、Japanese言語のMainMenu.nibファイルとして書き込むというものである。
こうして、Japanese.lproj/MainMenu.nibは書き換えられた。そこで、再度Interface Builderで開いてみる。Project Builderで、MainMenu.nibの下にあるJapaneseを開くわけだ。そうして、メニューなどを見てみると、確かに、menu.stringsで書き換えを行った部分は、日本語になっている。
◇テーブルに従ってメッセージが日本語化された
nibファイルは単にユーザインタフェースを定義するだけでなく、オブジェクトのインスタンス化やあるいは線でつないだ参照関係などさまざまな情報を含む。こうした情報をのなかの、メッセージだけを変換して、新たなnibファイルを作るということで、ローカライズができるわけだ。
もし、たとえば、新しくメニューが増えたとしたら、そのときは、そのメニュー項目に対応した変換項目を、この場合だと、menu.stringsに付け加えればよい。そして、前期のnibtoolコマンドを実行すればいいわけだ。こうして、Interface Builderでのさまざまな設定を引き継いだローカライズリソースが作成できる。とにかく作業は、英語版のリソースで設定をして、変換テーブルを追加変更してコマンドを走らせるということになる。もし、英語のメッセージに比べて日本語だと何倍にも長くなるようなら、レイアウトの変更も必要になる。そのときは、Japanese言語にあるnibファイルを開いて編集すれば良いだろう。
nibtoolで新たなnibファイルを生成するのなら、わざわざ最初にProject BuilderでJapaneseのリソースを作る必要はないと思うかもしれないが、nibtoolはバグとして、既存のファイルへの上書きしかできないことが明記されている。また、Project Builderでリソースを作っておけば、プロジェクトの登録や、ビルド関連の登録もされて、便利だということもあるわけだ。
なお、nibtoolをnibファイルのすべての中身について適用するような利用方法として、前記のものを紹介したが、一部分の設定だけを取り出すなどさまざまな機能があるので、詳細なニーズがある場合には、manコマンドでどんな機能があるのかをチェックしてもらいたい。たとえば、変換テーブルの適用だけでなく、さらに第三のnibファイルでレイアウト情報だけを取り出して適用するといった手法もある模様だ(-pオプション)。言語ごとに大きくレイアウトが違う場合で、後からのnibファイル修正があるような場合にはそうした方法も取ることができるだろう。
――――nibtoolの自動化
いちいちnibtoolコマンドを入力するのも面倒だし、パラメータの指定も大変である。そういうときには、自動化してしまえばよい。Project Builderで、コンパイルしてパッケージを作る前に、前記のnibtoolコマンドを実行するというわけである。Project Builderのターゲットの変種にある「ファイルとビルドフェーズ」というところで設定を行うが、1つのターゲットで、複数のビルドフェーズを定義することができ、そのフェーズを順番に行うというのが基本となっている。
では、ビルドフェーズを追加して、nibtoolコマンドを実行されるようにしておこう。「プロジェクト」メニューから「アクティブターゲットを編集」(Command+option+E)を選択するなどして、ターゲットの編集の状態にしておき「ファイルとビルドフェーズ」のタブを選択しておく。そして、とりあえずは、いちばん最初のHeadersの領域を選択しておく。
◇「ファイルとビルドフェーズ」で1つのフェーズを選択しておく
次に「プロジェクト」メニューの「新規ビルドフェーズ」から「新規フェルスクリプト・ビルドフェーズ」を選択する。
◇シェルスクリプトのビルドフェーズを追加する
そうすると、次のように、Shell Scriptというビルドフェーズが作成される。ここで、「スクリプト」として前記のコマンドを入力しておく。ここでは、プロジェクトのフォルダがカレントディレクトリとして機能するようなので、前のコマンドをそのまま入力すればよい。
◇スクリプトを定義した
こうすれば、アプリケーションんをビルドするときはいつもnibtoolコマンドが実行され、そのつど、English言語のMainMenu.nibの内容が変換されて、Japanese言語のMainMenu.nibとなることになる。ただし、nibtoolの処理によって更新される内容によるのか、単にビルドしただけでは、nibtoolによる処理の結果はアプリケーションには反映されない。そこで、いったんクリアすることで、設定は反映されるようだ。毎回クリアするのも面倒だが、いずれにしてもnibツールの結果を反映させたいときには、手作業でクリアをするというのがいちばん手軽だろう。いずれにしてもビルドフェーズに定義しておくことで、nibtoolの実行を忘れないでおくこともできる。
(この項、続く)
カテゴリ:ユーザインタフェース, Cocoa, 今から始めるCocoaプログラミング
1GHzデュアルプロセッサ版のPower Mac G4が発売されたが、それに合わせて、ハードウエアの詳細なスペックが記載されているDeveloper Noteが更新されている。2MBのL3キャッシュは、CPUとは1:4のクロックで稼働するため、1GHz版ではL3のクロックは250MHzになることや、メモリのスペックなどが記載されている。マルチプロセッシングについての記述がMac OS 9向けになっている点は、以前と更新されていない。
関連リンク:Power Mac G4 Developer Note
カテゴリ:アップルからの開発資料, Power Mac