0

3 つの異なる言語をサポートする iOS 5 アプリがあります。ストーリーボードをローカライズすると、各言語でコピーが作成され、それぞれを翻訳する必要があります。

言語の選択はシステム設定に依存するため、iPhone のシステム言語が「英語」の場合、アプリケーションで選択したストーリーボードは英語になります。カタロニア語に変更すると、アプリにカタロニア語が表示されます。

私の意見では、このアプローチにはいくつかの欠点があります。

  • Apple がサポートしていない言語にアプリを翻訳することはできません。これは、監視言語にとって重要になる可能性があります (カタロニア語は、iOS 5 までサポートされていません)。

  • ユーザーがアプリをカタロニア語で表示したいが、残りのシステムは英語で表示したい場合は?

私の質問は、アプリの起動時にストーリーボードの言語を選択するにはどうすればよいですか? まったく可能ですか?また、 NSLocalizedString を使用してローカライズされた文字列に対しても機能しますか?

よろしく、 JoanBa

4

2 に答える 2

0

ストーリーボードをlocalized.stringsのようにローカライズされたバージョンに分割できるようですが、その方法についてはどうでしょうか。

私は経験から試したことはありませんが、この質問は以前に回答されています。

于 2012-04-28T19:45:15.350 に答える
0

ジェイコブの答えを読んで少しテストした後、これは私のために働いたコードです:

    int main(int argc, char *argv[])
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    // Reset system defaults to get the complete language list.
    [defaults removeObjectForKey:@"AppleLanguages"];
    // Default language choosen by user.
    NSString *defLanguage = [defaults objectForKey:@"Language"];
    NSArray *sysLangugages = [defaults arrayForKey:@"AppleLanguages"];
    // System default language: first element of array.
    NSString *sysLanguage = [sysLangugages objectAtIndex:0];
    NSArray *array = [NSArray arrayWithObjects:defLanguage, sysLanguage, nil];
    [defaults setObject:array forKey:@"AppleLanguages"];

    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

デフォルトの言語を変更した後にアプリを再起動するだけで、ローカライズされたすべてのリソース (文字列とストーリーボード) が変更されます。

また、AppDelegate.m のメソッドでこのコードを試しました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

しかし、うまくいきません。main.m でのみ正常に動作します。どうしてか分かりません。

このコードを使用すると、iOS でサポートされていない言語のアプリケーションを作成できることに注意してください。

よろしく、

ジョアンバ

于 2012-04-30T10:52:17.233 に答える