タイトル鶴薗賢吾のCocoaはやっぱり!出張版》#6 - ツールバー(9)カテゴリーユーザインタフェース, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
作成日2001/12/17 23:1:24作成者新居雅行
―――――ツールバーの日本語化

 ̄ ̄ ̄nibファイルの日本語化___

ここでは、ツールバーの日本語化を扱っていきます。一般のアプリケーションの日本語化と基本的に同じですが、フレームワークによって自動的に日本語化される部分もありますので、その辺りに注目してください。

まず、Project BuilderでMainMenu.nibを選択して、「 プロジェクト → 情報を見る 」メニューを選択します。

◇情報パネル
 

「 地域情報とプラットフォーム 」というポップアップボタンから「 異なる地域情報を追加... 」を選択して、「 Japanese 」と入力してOKボタンをクリックすると、日本語用のMainMenu.nibが追加されます。このまま何もせずに、ビルドして実行すると以下のようになります。

◇日本語のMainMenu.nibによる設定パレット
 

 ̄ ̄ ̄アイテム辞書の日本語化___

シート上の説明も日本語になりますし、標準アイテムのラベルなども自動的に日本語になりますので、ほとんど何もする必要はありません。ただし、カスタムアイテムは自動的に日本語になりませんので、コードの一部をマルチリンガル対応する必要があります。このサンプルでは、awakeFromNibを修正するのが一番簡単ではないかと思います。Blue Textアイテムのラベルだけ日本語化してみたソースが以下のものです。

◇Controller.m → awakeFromNib

// Blue Textを辞書に追加 ( イメージアイテム )
addToolbarItem( toolbarItems,
@"BlueLetter", NSLocalizedString( @"BlueLetter", @"" ),
@"Blue Text",
@"This toggles blue text on/off",
self, @selector(setImage:),
[ NSImage imageNamed : @"blueLetter.tif" ],
@selector(blueText:), fontSizeMenu );

NSLocalizedString関数は、プロジェクト内のLocalizable.stringsというファイルを参照しますので、このファイルを作ってMainMenu.nibと同様の手順でマルチリンガル化して、日本語用のファイルに以下のように記述しておきます。文字コードはUnicodeにしておきます ( 「 形式 → ファイルエンコーディング → Unicode 」メニューを選択します )。

◇Localizable.strings > Japanese

"BlueLetter" = "文字を青くする";

すると、以下のように日本語化されます。

◇ツールバーアイテムを日本語化したところ
 

メニューは以下のようになります。「 Hide Toolbar 」は自動的に日本語化されますが、「 Customize Toolbar... 」は日本語化されませんので、こちらは編集する必要があります。

◇日本語のMainMenu.nibによるメニュー
 

―――――もう1つのサンプル : SimpleToolbar

Appleから提供されているツールバーのサンプルはもう1つあります。これは、Developer Toolsによってインストールされるもので、SimpleToolbarというものです。起動ドライブの以下の場所にあります。

◇SimpleToolbar
 /Developer/Examples/AppKit/SimpleToolbar/

こちらのサンプルはドキュメントベースのアプリケーションにツールバーを実装したものになっています。そのため、複数のウィンドウにツールバーを表示するようなアプリケーションの動きを追うにはこちらを使うのがいいかもしれません。

◇SimpleToolbarのウィンドウ
 

この図を見ると、手前のウィンドウはテキストが編集されているためにSaveアイテムが有効になっていて、奥のウィンドウは無効になっていることが分かります。

また、ツールバーのインスタンス取得メソッドであるtoolbar : itemForItemIdentifier : willBeInsertedIntoToolbar : メソッドは、ToolbarSampleとちょっと違った書き方になっています。アイテム辞書を用意するのではなくて、アイテムの識別子をif文でアイテムの数だけ比較するというやり方になっています。アイテム辞書を使う場合は便利ですが、全てのアイテムを統一的な処理で書けるようにする必要があります。複雑なツールバーアイテムを使っているような場合は、こういうやり方が楽なこともあるかもしれません。

◇MyDocument.m → toolbar : itemForItemIdentifier : willBeInsertedIntoToolbar :

- (NSToolbarItem *) toolbar : (NSToolbar *) toolbar
itemForItemIdentifier : (NSString *) itemIdent
willBeInsertedIntoToolbar : (BOOL ) flag {
: 省略
if ( [ itemIdent isEqual : SaveDocToolbarItemIdentifier ] ) {
} else if ( ... ) {
} else if ( ... ) {
: 省略

―――――ツールバー作成手順

この記事は、サンプルコードの解説ということで書いていますので、実際に作る時の手順の説明にはなっていません。そこで、最後に手順を書いておきます。もちろん、この順番どおりでないと作れないわけではありません。

  • Project Builderで、プロジェクトの作成。
  • Interface Builderで、ビューアイテム用のカスタムビューを作成。
  • デリゲート、ターゲットのインスタンスの作成 ( アクションとアウトレットの作成 )。
  • ビューアイテムとターゲットのコネクト。
  • ビューアイテム用のメニューの作成とターゲットとのコネクト。
  • イメージアイテム用の画像の作成とプロジェクトへの登録。
  • Project Builderでアプリケーション起動時のアイテム辞書作成や初期化モジュールのコーディング。
  • デリゲートの3つの必須メソッドをコーディング ( これでとりあえず動きます )。
  • デリゲートの必須以外のメソッドのコーディング。
  • 日本語対応。

―――――まとめ

個人的にはCocoaアプリケーションなので、ツールバーはグラフィカルな操作で作れるのかと思っていましたが、そうではなくてコーディングがそれなりに必要です。Interface Builderでのサポートがもっとあるとよいのですが、今後の改善に期待したいところです。とはいえ、フレームワーク側の補助もかなりあるため、慣れれば、さほどの時間をかけずにツールバーをつけることが可能です。是非チャレンジを。
(この項、以上)
[鶴薗賢吾]
関連リンクCocoaはやっぱり!