Skip to content

Instantly share code, notes, and snippets.

@yatatsu
Last active August 29, 2015 14:05
Show Gist options
  • Save yatatsu/bccb6d9720cd56348498 to your computer and use it in GitHub Desktop.
Save yatatsu/bccb6d9720cd56348498 to your computer and use it in GitHub Desktop.
localization in iOS

多言語対応調査

参考リンク

多言語対応の方法

以下に詳しい.

Xcode 5でアプリを多言語対応するまでの全スクリーンショット - Dolice Lab

  1. Project->Info->Localizationsに追加する
  2. InfoPlist.stringに追加される(アプリ名)
  3. 必要があればplist, stringsで追加する

InfoPlist.strings(English)といったように表示されるが実際は

│   ├── en.lproj
│   │   ├── InfoPlist.strings
│   │   ├── Localizable.strings
│   │   ├── Main.strings
│   │   └── Mountains.plist
│   ├── fr.lproj
│   │   ├── InfoPlist.strings
│   │   ├── Localizable.strings
│   │   ├── Main.strings
│   │   └── Mountains.plist

こんなかんじのディレクトリ構成になってる.

また, Settings.bundle/以下にen.lproj等配置し, .stringsファイルを作ると, 設定アプリの設定項目(Settings.bundle/Root.plistで設定する)をローカライズ.

基本の扱い方

設定されている言語環境に合わせて, .lprojを勝手に見てくれる.

NSString *text = NSLocalizedString(@"key", @"defaultValue");
// Dictionaryを取得したい場合は,
NSString *path = [[NSBundle mainBundle] pathForResource:@"Mountains", ofType:@"plist"];
NSArray *mountainList = (path != nil ? [NSArray arrayWithContentsOfFile:path] : nil);
NSMutableArray *array = [NSMutableArray arrayWithCapacity:
							 (mountainList != nil ? [mountainList count] : 0)];

NSLocalizedString(K, V)は以下のマクロ.

#define NSLocalizedString(key, comment) \
	    [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

言語環境にかかわらずリソースを使いたいとき

以下に詳しい.

NSString *enPath = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle *bundle = [NSBundle bundleWithPath:enPath];
// 後は同じ

現在設定している言語を取得する

以下に詳しい.

NSArray *languages = [NSLocale preferredLanguages];
NSString *current  = languages[0]; 

preferredLanguagesの結果を見ると以下のルールが存在する様です。

  1. 選択した言語が先頭に移動する
  2. 英語(en)以外が選択されたとき、英語は2番目
  3. 並び順は維持され、他の言語が選択された場合、その他の言語の並びはそれぞれ1つ後ろへずれる (英語については例外で 2. の挙動を取る)

In-App Purchase のアイテムのLocalize

以下に詳しい.

SKProduct Class Reference

SKProductのプロパティからpriceLocaleを取得して, NSNumberFormatterを使えとのこと

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment