(前回)Cocoaの日々: BlogAssistant(4) - プラグインのプロトタイプ作成
前回 Safariのコンテキストメニューへメニューを追加した。
まずは(いつものごとく) Localizable.strings を作る。
中身はこんな感じ。最初のうちは英語だけ作っていく。
これを NSLocalizedString( ) で参照する。
item = [[[NSMenuItem alloc] initWithTitle:
NSLocalizedString(@"MenuAddPage", @"")
NSLocalizedString(@"MenuAddPage", @"")
action:@selector(addPage:)
keyEquivalent:@""] autorelease];
実行して確認してみる。
ちょっと違う。
うっかりしていたが NSLocalizedString( ) はメインバンドル内の Localizable.strings を参照するようになっている。プラグインは Safari のコンテキストで動作するので、メインバンドルはこのプラグインのそれではなく Safari のバンドルが使われる。プラグインのバンドル(NSBundle)を明示的に指定してやる必要がある。
同系列の関数には NSLocalizedStringFromTableInBundle( ) があって、こちらだとバンドルを指定することができる。
バンドル(NSBundle)を取得するにはいくつか方法がある。
Mac Dev Center: NSBundle Class Reference
今回は +[bundleForClass:] を使うことにする。また NSLocalizedString( ) のリファレンスによれば、内部的には -[NSBundle localizedStringForKey:value:table:] を呼び出しているとのことだったので、これを使うことにする。
Mac Dev Center: NSBundle Class Reference - localizedStringForKey:value:table:
マクロではなくユーティリティクラスを用意して、そこへメソッドとして実装する。
Utility.m
@implementation Utility
+ (NSString*)localizedStringForKey:(NSString*)key
{
NSBundle* bundle = [NSBundle bundleForClass:[self class]];
return [bundle localizedStringForKey:key value:@"" table:nil];
}
@end
これを使う様に修正を入れ、
item = [[[NSMenuItem alloc] initWithTitle:
[Utility localizedStringForKey:@"MenuAddPage"]
action:@selector(addPage:)
keyEquivalent:@""] autorelease];
実行してみよう。
出た。
これで行こう。