頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


デバイスの設定と違う言語を表示する方法

言語ごとにLocalized.stringsファイルを用意してNSLocalizedStringで言語ごとにテキストを表示するというのが一般的なローカライズの方法だけどさ、ユーザーが指定するってのに対応させるにはどうしたらいいんだろうってお話だよ。

なぜユーザーがわざわざ言語をアプリ内で指定したがるんだよ?そもそも使いたい言語にデバイスで設定してるだろう?
と思ったあなたはおみごと、パリ挑戦権獲得!ってとこなんだけど、機械的に翻訳されたヘンテコな母国語よりも英語の方がマシだ!ってユーザーもいるんだよね。ええ、そんなアプリをリリースしてます、すいません。

イメージ画像
そんなわけですでに言語ごとのLocalized.stringsファイルがあるとするよ。
例えばiPhoneの言語設定が日本語にしてるのにLocalized.strings(English)内に記述している英語の文字列を得る方法を二つほどテストしてみたんだ。

まず一つ目。
[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil] forKey:@"AppleLanguages"];
って魔法の呪文を唱えるんだ。するとあら不思議、アプリ内のNSLocalizedString部分の文字列がちゃんと英語になってるでしょ?
え、なってない?そういうこともあるよね。
どうもアプリ起動直後の部分に置く方が効果あるみたいよってテキトウな説明だけどさ、実のところよくわからなくて起動直後に呼ばれる
application:didFinishLaunchingWithOptions:
に置けば効果あるんだけど、それ意外だとうまくいったりいかなかったり。
そもそも、アプリ内部で切り替えるなら、切り替えた直後に目にする文字列がスパっと変わるのが理想的なんだろうけど、この方法だとダメなんだよね。
切り替え後にユーザーにアプリを停止して、ホームボタン2回押して当アプリのアイコンを削除して再スタートしてください、なんて指示できるわけないし。


二つ目の方法は
iphone - How to force NSLocalizedString to use a specific language - Stack Overflow
このリンク先にあるNSBundleオブジェクトbundleに
[bundle localizedStringForKey:key value:alternate table:nil];
ってメソッドで任意のLocalized.strings内の文字列を得るって方法なんだよ。

確かに動いてくれたんだけど、切り替え直後に文字列の再描画が必要なのは同じで、それよりも問題なのが、コード内のNSLocalizedStringって記述の部分を全て書き換えになるってことかな。結構な量だったりするし。そもそも言語を切り替えるなんてめったにないなのになあ、なんて考えると何もできなくなっちゃうよ。

まあアプリを最初から作るのならどうということない問題なんだけど、俺の人生みたいに行き当たりばったりだと苦労するってことだね。
スポンサーサイト

<< これぞ名古屋クオリティー?コメダ珈琲店へ行ってきた  TopPage  強制的に画面を回転させる方法はやっぱりない? >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/587-4438e9fd




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad