アプリケーションにアプリケーション言語(システム全体ではなくアプリケーション言語のみ)を変更するオプションが欲しいのですが、ヒントを教えてください。
前もって感謝します、
ローカリゼーションについて知っています!
アプリケーションにアプリケーション言語(システム全体ではなくアプリケーション言語のみ)を変更するオプションが欲しいのですが、ヒントを教えてください。
前もって感謝します、
ローカリゼーションについて知っています!
これを行うには、Xcode から設定したカスタム ビルド フラグを使用します。このようにして、デバイスのすべての設定を変更するのではなく、ローカリゼーションの下でアプリケーションを実行できます。
これについては、 http://abizern.org/2012/03/18/simple-localisation-testing/にブログ記事を書きました。
Github にはサンプル プロジェクトがあり、実際の動作を確認できます: https://github.com/Abizern/SimpleLocalisationTesting
アプリのUIで言語を変更する方法について、実際には別のアイデアを考えていましたが、1.すべての文字列を手動で設定し、2.言語設定が変更されたときにすべてのUI要素を更新するメソッド(通知)を提供する. この考え方は、iOS が文字列のローカライズされたバージョンを見つけるために使用するのと同じ方法に基づいています。そのため、前提条件として、フォルダー構造 language_id.lproj を持つバンドル (AppNameStrings.bundle など) を提供する必要があります。ここで、language_id は、提供する言語の指定子です。このようなバンドルを作成するには、設定バンドルを作成し、それを Finder で開き、root.plist ファイルを削除します。次に、バンドルから読み取るために使用できる関数が必要です。ローカライズされた文字列を読み取るために使用する 2 つの方法を次に示します。GlobalDefinitions.h ファイルに次のメソッドを追加します。
#ifdef __OBJC__
NSBundle *yourNameBundle(void);
NSString *YourNameLocalized(NSString *stringToken, NSString *language);
#endif
GlobalDefinitions.m ファイルのこのコード
NSBundle *yourNameBundle(void) {
static NSBundle* bundle = nil;
if (!bundle) {
NSString* path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"YouNameBundle.bundle"];
bundle = [NSBundle bundleWithPath:path];
}
return bundle;
}
NSString *YourNameLocalized(NSString *stringToken, NSString *language) {
if (yourNameBundle()) {
return [yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language];
} else {
return stringToken;
}
}
NSBundle でカテゴリを作成する必要があります
[yourBundle localizedStringForKey:stringToken value:@"" table:@"Root" language:language]
標準メソッドには言語パラメータがないためです。メソッドで、対応する language.lproj/Root.strings ファイルを開き、stringToken をスキャンします。見つからない場合はトークン自体を返し、そうでない場合はテキスト文字列を返します。たとえば、label.text = YourNameLocalized(@"Token", [self provideLanguageIdentifier); などのテキストのローカライズ版が必要な場合はいつでも。これで完了です。私はまだそれを行っていませんが、うまくいくはずです。
辞書の配列で満たされた .plist によって作成されたカスタム ローカリゼーションを作成しました。このような:
kYes
en = @"Yes"
ru = @"Да"
kNo
en = @"No"
ru = @"Нет"
私のプロジェクトでは、この文字列を読み取るためのシングルトン クラスを作成しました。オプションで、ユーザーは必要な言語を選択します (最初にアプリを起動して、現在のシステム状態から言語を選択するか、デフォルトの言語を設定します)。選択した言語は、次回の起動時に使用するためにファイルまたは設定に保存する必要があります。シングルトンでは+getStringWithKey:
. そこで、@"kYes" を渡し、アプリのみの現在のローカリゼーションの文字列を取得します。また、標準のローカリゼーション ファイルをプロジェクトに追加する必要があります。追加しないと、サポートするすべての言語が iTunes に表示されないためです。