16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS9の言語関連

Last updated at Posted at 2015-10-03

iOS9にしたら急に英語に・・(泣

そう、iOS9になって、NSLocale.preferredLanguages()の戻り値が変わったり、
ローカライズフォルダの読み込みポリシーが変わった?りして、とにかくiOS9の言語処理周りで苦労しました。

そしてワークアラウンドについて記載したいと思いつつ、いろいろ読みあさりました。
結論アプリの目的に応じた実装があるな(NSLocaleを使う場合、NSBundleを使う場合など)、、
ということで、

有用と思われるリンクだけ、、まとめてみました。

Language Identifiers in iOS 9(Technical Note TN2418)
How iOS Determines the Language For Your App(Technical Q&A QA1828)
Re: Get the system language
Re: preferredLanguages iOS 9
Re: English always being loaded.
Internationalization and Localization Guide
Localized Resources in Bundles(Bundle Programming Guide)

iOS Developer Libraryより

Language Identifiers in iOS 9(Technical Note TN2418)

iOS9ではNSLocale.preferredLanguages()の戻り値がiOS8と変わったという内容です。
iOS9からは、言語や地域の複数組み合わせが許容されました(ja-JPとか)ということのようです。
なぜそうしたかというと、「よりスマートな言語のフォールバックを可能にするため」だそうです。汗
はぁ、、、そ、、そうですか、、。

How iOS Determines the Language For Your App(Technical Q&A QA1828)

iOSがどういった手順でアプリ内で使用する言語を決定するのかについて書かれています。

Apple Developer Forumsより

Re: Get the system language

システムの言語を取得するための方法をどうすればいいのか、に関する話題のスレッドです。
その中のAppleの回答に、

The "system language" is of a tricky concept. In most cases what you what is the language your >app is running in, and that's available via the main bundle's preferredLocalizations property.

システムの言語をとるのはトリッキーだ。
ほとんどのケースで、何の言語でアプリが動いているかは、bundle(NSBundle)のpreferredLocalizationsが利用できます。

というのがあります。
システムの言語をとるのはトリッキーなんですか・・。汗
残念なことに、Appleから明確な回答はなく、とにもかくにもNSBundleのpreferredLocalizationsをオススメされます。

※やり取りの中で会話が成立せず、それを「言語の壁」と皮肉ってるようなコメントがあって面白いです(笑

Re: preferredLanguages iOS 9

NSLocaleのpreferredLanguagesで取れる値が変わったという話題のスレッドです。
こちらで投稿されている方が提案されている方法が、1つのワークアワウンドとして
いいのかなと個人的に思っています。

    NSString *firstLanguage = [[NSLocale preferredLanguages] firstObject];
    NSString *language = [[firstLanguage componentsSeparatedByString:@"-"] firstObject];
    if ([language isEqualToString:@"ja"]) {
    }else{
    }

Re: English always being loaded.

Xcode7とiOS9でローカライズリソースのロードがおかしくなったという報告のスレッドです。
今のところバグ??とされているようです。(最終的な回答がないので不明)

確かに、iOS9にしてシステムの言語は日本語なのに、jp.lprojの中身がロードされず、
英語になってしまうということがありました。(ja-JP.lprojにすればなおる)
っと思いきや、そうならないプロジェクトもありました。。。
全く意味不明です。
プロジェクトを作った時のXcodeのバージョンが関係してるの、、、、かな、、、??

その他ローカライズに関するドキュメント

Internationalization and Localization Guide

ローカライズに関するガイドです。

Localized Resources in Bundles(Bundle Programming Guide)

プロジェクト内で、どうやってローカライズリースを持つか、という説明です。

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?