レビューを促すアラートを表示するAppiraterでローカライズ対応する
Appiraterというレビューを誘導するアラートを表示するライブラリがある。
今回はこれのローカライズ対応のうまい方法についてどこにも情報が見当たらなかったので備忘録。
SampleFileをgitに用意しときました。
巷で広まってる対応方法
探すとAppirater.hを直接編集するという方法を結構見かけるが、
cocoapodsなどでいれていると更新するたびに元に戻るのでこの方法は使えない。
ということで、ライブラリ自体には手を入れずローカライズする方法がソースを見たら実装されていたので
その方法の紹介をする。
Appiraterのインストール
cocoapodsで簡単インストールできる
PodFileで以下を追加して
1 |
<code> pod 'Appirater'</code> |
install もしくは
1 |
<code>$ pod install</code> |
updateするだけ
1 |
<code>$ pod update</code> |
便利な世の中になりました。
コード実装
AppDelegate.mにコードを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [Appirater setAppId:@"000000000"]; // インストール後、再びメッセージを表示するまでの日数。(デフォルト:30日) [Appirater setDaysUntilPrompt: 30]; // 「後で見る」を選択したときにメッセージを再び表示するまでの日数。(デフォルト:1日) [Appirater setTimeBeforeReminding: 1]; // 再びメッセージを表示するまでの起動回数。(デフォルト:20回) [Appirater setUsesUntilPrompt: 20]; // ユーザーがアプリ内で何か特別な操作をしたときに意図的にメッセージを表示するか否か。(デフォルト:-1) // 値 : -1=無効, 1=有効 // 表示する場合は、任意の箇所に [Appirater userDidSignificantEvent:YES] を呼ぶ。 [Appirater setSignificantEventsUntilPrompt: -1]; // 自分のLocalizedFilesを使いたい時に指定 [Appirater setAlwaysUseMainBundle: YES]; #ifdef DEBUG // デバッグモードの有無。YESにすると起動の度に表示される。(デフォルト:NO) [Appirater setDebug: YES]; #endif [Appirater appLaunched:YES]; return YES; } |
肝なのはこの部分
1 |
<code>[Appirater setAlwaysUseMainBundle: YES];</code> |
ここをYesにすることで自分で定義したローカライズファイルを読み込むようになる。
stringsファイルの準備
Supporting Filesにstringsファイルを追加する。
iOSの「Resource」から「Strings Files」を押下して「Next」を押下する。
次に肝なのがファイル名を「AppiraterLocalizable.strings」にすることである。
そうしないと読み込んでくれません。
次にローカライズ化する。
作成したファイルを右クリックして「Show File Inspector」を押下する。
「Localize」ボタンを押下する
再度「Localize」ボタンを押下する。
再度File Inspectorを開いて「English」にもチェックを付けておく。
日本語を追加する場合はプロジェクト名の「Info」タブから「Localization」の「+」ボタンを押下し、「Japanese」を追加する
そのまま「Finish」ボタンを押下する
するとこんな形にそれぞれで言語をわけられるようになる。
stringsには以下のようにそれぞれの言語で書いてあげる
1 2 3 4 |
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "評価して!お願い!%@を評価して!"; "Rate %@" = "%@評価してやる"; "No, Thanks" ="いやだ!!"; "Remind me later" = "今忙しい!"; |
これでRunしてみればうまくローカライズされているはず。
まとめ
setAlwaysUseMainBundleのオプションを用いることでライブラリを弄らずにローカライズすることができた。
ドキュメントみてもソースを直に見ろしか書いてないのでドキュメントもうちょっとちゃんと書いてくれればいいなと思いました。