ブログで練習ちゅー

ブログで練習ちゅー

インプット→アウトプットの練習帳。

Amebaでブログを始めよう!
前回ローカライズのコードをスニペットにしたので、
その繋がりとしてコードからローカライズファイルを一気に作る方法を書きます。

1、ターミナル起動

2、対象のプロジェクトに移動
cd 対象プロジェクトのパス

3、以下のおまじないを打ち込む!
genstrings -a $(find . -name "*.m")

4、プロジェクトフォルダ下に "Localizable.strings" というファイルができているはず。
中身を見ると、、

元のコードがコレ↓
self.title = NSLocalizedString(@"test"@"ローカライズテストだよ");

こっちが "Localizable.strings" の中身↓

/* ローカライズテストだよ */

"test" = "test";

となってます。


さっきのおなじないにより、
プロジェクト内にある全ての*.mファイルからローカライズのコードを拾ってきてくれるらしい。
ご丁寧にコメントまで、、ありがたいわ。


5、作ったファイルをプロジェクトに組み込みます。
"Supporting File" あたりで右クリックして、
 "Localizable.strings" ファイルを "Add Files to プロジェクト" します。

6、"Localizable.strings" ファイルを選択して、
右側ウィンドウからLocalizationを探し出して+ボタンを選択。
Englishが追加されます。

7、更にもう一回+ボタンを選択してJapaneseも追加します。
これで英語、日本語のローカライズファイルができました。

8、それぞれのファイルに対応する言語で書き換えます。


English

/* ローカライズテストだよ */


"test" = "This is test.";

Japanese

/* ローカライズテストだよ */


"test" = "これはテストです。";

あとは端末の言語設定を変更して実行!確認してみるべし。
(設定アプリ → 一般 → 言語 → Englishもしくは日本語)


今回はスニペットの作り方をご紹介します。

何度も何度も同じコード書くのにうんざり。。
あのコードってなんて名前だったっけかな。。
そんなわたしにスニペットです。

★スニッペットを作ろう

スニペットにしたいコードを書いて、"Code Snipet Library"にDrag&Dropしてあげます。

以下のように文字を囲むと置換できるようです。
<#string#>

"My Code Snippet"として作成されます。

★スニペットに名前をつけよう

作成したスニペットを選択すると、吹き出しで詳細画面が表示されます。
その画面のEditボタンから詳細情報を編集できます。

Title:分かりやすい名前をつけます。
Summary:簡単な説明文を書いておきます。
Completion Shortcut:コード補完に出てくれるので、覚えやすく且つ入力しやすくがオススメです。

とりあえず、あとはいじらずDoneします。
よりよく使えるようになりました。

スニペットはライブラリも色々あるみたいです。
どんどん使って颯爽と組み上げたいっ!





iAdの実装方法を調べたのでご紹介します。

1、iAd.frameworkを追加

2、iAdを表示するクラスの.hを実装

#import <UIKit/UIKit.h>

#import <iAd/iAd.h>


@interface iAdSampleViewController : UIViewController <ADBannerViewDelegate> {

    BOOL isHiddenBanner_;   // バナー表示フラグ

}


3、続きまして.mを実装

// 広告ロード完了のデリゲート


- (void)bannerViewDidLoadAd:(ADBannerView *)banner {


    


    // バナー表示


    if (isHiddenBanner_) {


        [UIView beginAnimations:nil context:nil];


        banner.frame = CGRectOffset(banner.frame, 0.0, 50.0);


        [UIView commitAnimations];


        isHiddenBanner_ = NO;


    }


}




// 広告ロード失敗のデリゲート


- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {


    


    // バナー非表示


    if (!isHiddenBanner_) {


        [UIView beginAnimations:nil context:nil];


        banner.frame = CGRectOffset(banner.frame, 0.0, -50.0);


        [UIView commitAnimations];


        isHiddenBanner_ = YES;


    }


}




- (void)viewDidLoad


{


    [super viewDidLoad];



    // 初期化:バナー非表示


    isHiddenBanner_ = YES;


    


    // バナーView生成


    ADBannerView *bannerView = [[ADBannerView alloc] initWithFrame:CGRectMake(0.0, -50.0, 320.0, 50.0)];


    bannerView.delegate = self;


    bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;


    bannerView.backgroundColor = [UIColor clearColor];


    [self.view addSubview:bannerView];


}


これで表示すると、、



ぴょこっと表示するアニメーションいい感じですね。


ちなみにバナーの表示タイプは2つ
ADBannerContentSizeIdentifierPortrait:320×50
ADBannerContentSizeIdentifierLandscape:480×32

以前は以下の2つが使用されてたみたいだけど、
今はコンパイル時にdeprecatedってwarning出ます。
非推奨というか廃止されるのかな。


ADBannerContentSizeIdentifier320x50

ADBannerContentSizeIdentifier480x32

今回は使用していないのですが、
他にもデリゲートメソッドがあるのでご紹介。


// 広告ロード前に呼ばれる

- (void)bannerViewWillLoadAd:(ADBannerView *)banner;

// バナータップ後に呼ばれる(YES返すとモーダル画面が表示される)

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave;

// モーダル画面が閉じた後に呼ばれる

- (void)bannerViewActionDidFinish:(ADBannerView *)banner;

どんなアプリかにもよるけど、
アプリ内で処理中のものを制御するのに使う機会ありそうだな。


ちなみにロードに失敗した時の処理は必ず入れないとリジェクトされるらしい。。
真っ白画面はかわいくないし不審だもんね。