メモ帳の作成(8)~ローカライズ

2010. 07. 17
メモ帳の最後は、nibファイルやアクションシートなどアプリケーションのローカライズを行います。

528

現状では言語環境を変えても英語表記の状態ですが、これを日本語に対応させます。


●nibファイルのローカライズ

XcodeのResourcesフォルダにあるnibファイルMainWindow.xibを右クリックしてコンテキストメニューを開き、『情報を見る』を選択します。

529

情報ウィンドウの『一般』タブで下方にある『ファイルをローカライズ可能にする』をクリックします。

530

自動で『ターゲット』タブに移ってしまいますので『一般』タブに戻ります。

531

下方にある『ローカリゼーションを追加』で『新しいローカリゼーションの名前を入力』のメニューから『Japanese』を選択し、『追加』をクリックします。

532

533

情報ウィンドウを閉じると、Resourcesフォルダ下のMainWindow.xibが階層化され、EnglishとJapaneseが追加されています。

MainWindow.xib (English)が英語版のnibファイル、MainWindow.xib (Japanese)が日本語版のnibファイルになります。

この時点でのMainWindow.xib (Japanese)は英語版のコピーなので内容は同一です。

ここから必要なローカライズを施していくことになります。

このようにローカライズ用にnibファイルを分離すると、レイアウト変更などを行う場合に全nibファイルを修正しなければならないので、ローカライズは最後に行うようにしましょう。

MainWindow.xib (Japanese)を開いて、『Clear』ボタンのタイトルを『クリア』に、『Font』ボタンのタイトルを『フォント』に修正します。

535

『Done』ボタンはプリセットされたボタンなので変更する必要はなく、自動で各言語に対応します。

※注:ただし、nibファイルをローカライズした場合に反映されます。
ローカライズ前は言語環境を『日本語』に設定しても『Done』表記のままです。

536

537

nibファイルを保存して『ビルドと実行』をしても結果が反映されない場合は、Xcodeの『ビルド』メニューから『すべてのターゲットをクリーニング』を選択すると治るようです。


●文字列リソースのローカライズ

続いてソースコードのローカライズを行います。

本書ではアクションシートのみをローカライズしていますが、折角なのでアラートとテキストビューの初期値もローカライズします。

XcodeのResourcesフォルダを右クリックしてコンテキストメニューを開き、『追加』→『新規ファイル...』を選択します。

新規ファイルのメニューは本書の内容から変更されており、現在は左ペインの『Mac OS X』の『Resource』下に『Strings File』があります。

538

『Strings File』を選択して『次へ』進み、ファイル名を『Localizable.strings』とします。

539

生成されたLocalizable.stringsファイルもnibファイルと同様に、

・右クリックしてコンテキストメニューを開き、『情報を見る』を選択
・情報ウィンドウの『一般』タブで下方にある『ファイルをローカライズ可能にする』をクリック
・自動で『ターゲット』タブに移るので『一般』タブに戻る
・下方にある『ローカリゼーションを追加』で『新しいローカリゼーションの名前を入力』のメニューから『Japanese』を選択し、『追加』をクリック

の手順で英語版と日本語版のローカライズファイルを作ります。


・Localizable.stringsファイルの編集

localizable.stringsのEnglishは、これまで使用していた文字列に置換用のキーを割り当てた感じになります。

/* アクションシートの文字列 */

"CONFIRM CLEAR TITLE" = "Are you sure you want to clear ?";
"CANCEL" = "Cancel";
"CLEAR" = "Clear";

/* アラートの文字列 */

"INFORMATION TITLE" = "Information";
"INFORMATION MESSAGE" = "Memo Application Sample";
"OK" = "OK";
"WEBSITE" = "WebSite";

/* テキストビューの文字列 */

"MEMO TEXT" = "Please write memo.";

541

localizable.stringsのJapaneseは、置換用のキーに日本語を割り当てた感じになります。

/* アクションシートの文字列 */

"CONFIRM CLEAR TITLE" = "クリアしてもよろしいですか?";
"CANCEL" = "キャンセル";
"CLEAR" = "クリア";

/* アラートの文字列 */

"INFORMATION TITLE" = "情報";
"INFORMATION MESSAGE" = "メモ帳サンプル";
"OK" = "了承";
"WEBSITE" = "ウェブサイト";

/* テキストビューの文字列 */

"MEMO TEXT" = "ヽ(゚∀゚)ノまこまこりん♪ヽ(゚∀゚)ノ";

542


・アクションシートの設定(clearMemoメソッドの編集)

ローカライズの文字列を呼び出すには置換用のキーを使ってNSLocalizedString関数で呼び出します。
(太字が修正した部分)

- (IBAction)clearMemo {
    // アクションシートを生成
    UIActionSheet *actSheet = [[UIActionSheet alloc] initWithTitle:NSLocalizedString(@"CONFIRM CLEAR TITLE", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"CANCEL", nil) destructiveButtonTitle:NSLocalizedString(@"CLEAR", nil) otherButtonTitles:nil];

    // アクションシートを表示
    [actSheet showInView:imageView];

    // アクションシートを破棄
    [actSheet release];
}

543


・NSLocalizedString
(Foundation関数)

NSString *NSLocalizedString(NSString *key, NSString *comment)

ローカライズ版の文字列を返します。

戻り値は、メインバンドルとnilテーブルでlocalizedStringForKey:value:table:を呼び出した結果になります。

keyではUnicode文字(\\Uxxxx)を指定することができます。
(genstringsユーティリティの -u オプションを参照してください)

詳細はNSBundleを参照してください。

Mac OS X v10.4以前では、genstringsユーティリティで正確に解析が行われるようにするため、keyパラメータにhigh-ASCII文字を含めることはできません。


・アラートの設定(showAboutメソッドの編集)

アクションシートと同様に置換します。
(太字が修正した部分)

- (IBAction)showAbout {
    // アラートを生成
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"INFORMATION TITLE", nil) message:NSLocalizedString(@"INFORMATION MESSAGE", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:NSLocalizedString(@"WEBSITE", nil), nil];

    // アラートを表示
    [alert show];

    // アラートを破棄
    [alert release];
}

544


・テキストビューの設定(loadPreferencesメソッドの編集)

アクションシートと同様に置換します。
(太字が修正した部分)

- (void)loadPreferences {
    // NSUserDefaulsのインスタンスを取得
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    // デフォルト値の辞書を生成
    NSDictionary *defaultsDic = [NSDictionary dictionaryWithObjectsAndKeys:NSLocalizedString(@"MEMO TEXT", nil), @"MEMO", @"Helvetica", @"FONT NAME", [NSNumber numberWithInt:18], @"FONT SIZE", nil];

    // デフォルト値の辞書を登録
    [defaults registerDefaults:defaultsDic];

    // メモの文字列の取り出しとテキストビューへの設定
    memoView.text = [defaults stringForKey:@"MEMO"];

    // フォント名の取り出し
    NSString *fontName = [defaults stringForKey:@"FONT NAME"];

    // フォントサイズの取り出し
    NSInteger fontSize = [defaults integerForKey:@"FONT SIZE"];

    // テキストビューのフォントを設定
    memoView.font = [UIFont fontWithName:fontName size:fontSize];

    // ピッカービューのフォント名の選択行を設定
    NSUInteger index = [fontNames indexOfObject:fontName];
    [fontPicker selectRow:index inComponent:0 animated:NO];

    // ピッカービューのフォント名の選択行を設定
    NSString *strSize = [NSString stringWithFormat:@"%d", fontSize];
    index = [fontSizes indexOfObject:strSize];
    [fontPicker selectRow:index inComponent:1 animated:NO];
}

545

ローカライズの結果は下図のようになります。

546

547

548

テキストビューの置換が反映されない場合は、Similatorの『コンテンツと設定をリセット』、またはXcodeの『ビルド』メニューから『すべてのターゲットをクリーニング』を選択すると治るようです。


●アプリケーションのタイトルのローカライズ

文字列リソースと同様に、Resourcesフォルダ下にInfoPlist.stringsを追加してJapaneseのローカライズを追加し、下記のように記述します。

InfoPlist.stringsのEnglish。

CFBundleDisplayName = "Memo";

549

InfoPlist.stringsのJapanese。

CFBundleDisplayName = "メガまっこ";

550

551

・CFBundleDisplayName
(情報プロパティリスト)

CFBundleDisplayNameは、表示するバンドル名を指定するものです。

バンドルにローカライズした名前を付けるには、情報プロパティリストと言語サブディレクトリのInfoPlist.stringsファイルの中に、このキーを含めます。

このキーをローカライズする場合は、CFBundleNameキーのローカライズ版を含める必要があります。

バンドルをローカライズするつもりが無い場合は、Info.plistファイルにこのキーを含めないでください。

このキーを含むことはバンドル名の表示に影響しませんが、このキーのローカライズ版の検索でパフォーマンスの低下を招きます。

バンドルのローカライズ名を表示する前に、Finderはファイルシステムの実際のバンドル名とこのキーの値を比較します。

二つの名前が一致した場合は、バンドルのInfoPlist.stringsファイルから適したローカライズ名を表示します。

名前が一致しなかった場合は、Finderはファイルシステム名を表示します。

Mac OS Xでの表示名についての詳細は、『File System Overview』を参照してください。



参考文献

Foundation Functions Reference

Information Property List Key Reference

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






Lifestyle 650 home entertainment system
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Lifestyle 650 home entertainment system
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR