- 国際化およびローカライズ - Apple Developer
- 言語を指定してリソースファイルから文字列を取得する | 目くじら日記
- Localization Highlights from WWDC | Smartling blog
- iOS8
- localization - AppStore In-App-Purchase: How to get the currency a user will pay in? - Stack Overflow
- In-App Purchase
- mattt/TTTLocalizedPluralString
- support pluralize
- questbeat/Lin-Xcode5
- Xcode5 plug-in
以下に詳しい.
Xcode 5でアプリを多言語対応するまでの全スクリーンショット - Dolice Lab
- Project->Info->Localizationsに追加する
- InfoPlist.stringに追加される(アプリ名)
- 必要があれば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の結果を見ると以下のルールが存在する様です。
- 選択した言語が先頭に移動する
- 英語(en)以外が選択されたとき、英語は2番目
- 並び順は維持され、他の言語が選択された場合、その他の言語の並びはそれぞれ1つ後ろへずれる (英語については例外で 2. の挙動を取る)
以下に詳しい.
SKProduct
のプロパティからpriceLocaleを取得して, NSNumberFormatter
を使えとのこと