3

英語とフランス語の2つの言語を必要とするアプリがあります。

Localizable.stringsファイルをそれぞれの「en.lproj」フォルダーと「fr.lproj」フォルダーに既に設定しています...iPadの言語を(ネイティブ設定アプリで)変更してからアプリを起動すると、実際、正しいテキスト(つまり、英語のコピーまたはフランス語のコピー)をロードします。

アプリを再起動せずに、UISegmentedControlで2つの言語を切り替える必要があります。

アプリに(現在の)言語を変更させて、すべてのUILabelsのテキストとUIImageViewsの画像を(再)設定するメソッドを呼び出すと、反対側の.lprojフォルダーのLocalizable.stringsファイルから読み取るようにするにはどうすればよいですか?!?

UISegmentedControlの使用方法を知っていますが、それは私の質問ではありません。アプリケーションのバンドル言語やロケールなどを設定するコード行をもっと探しています(internationalization.localizationはまったく新しいため)。

-

UIImageViewの画像を設定する方法の例:

myUIImageView1.image = [UIImage imageNamed:NSLocalizedString(@"myUIImageView1", @"comment for the translator")];

UILabelのテキストを設定する方法の例:

myLabel1.text = NSLocalizedString(@"myLabel1", @"comment for the translator");
4

1 に答える 1

3

解決策を見つけました!!!

次のテストアプリには、(選択した言語に基づいて)正しい「Localizable.strings」ファイルから目的の文字列を読み取る関数がありました: https ://github.com/object2dot0/Advance-Localization-in-ios-apps

-

私はこのコードと、アプリの第一言語を設定するために必要なコード(Braydenによって投稿された上記の回答にあります:NSLocalizedStringに特定の言語を使用させる方法)を取得し、それらをまとめました。

コードは次のようになります(注-UISegmentedControlは、ビューのviewControllerで関数を呼び出します[UISegmentedControlの'Value Changed'メソッドがトリガーされたとき]、親viewControllerでtoggleLanguage関数を呼び出します):

    -(void)toggleLanguage:(NSString *)primaryLanguage secondaryLanguage:(NSString *)secondaryLanguage
    {
        //set app's primary language
        defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:[NSArray arrayWithObjects:primaryLanguage,secondaryLanguage,nil] forKey:@"AppleLanguages"];
        [defaults synchronize];

        //update UILabel and UIImageViews
        [self setLanguageSpecificItems];
    }
    -(NSString *)languageSelectedStringForKey:(NSString *)key
    {
        //read primary language
        NSArray *appleLanguagesArray = [defaults objectForKey:@"AppleLanguages"];
        NSString *currentLanguage = [appleLanguagesArray objectAtIndex:0];

        //get the path to the desired lproj file
        NSString *path;
        if(currentLanguage==@"en")
        {
            path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
        }
        else
        if(currentLanguage==@"fr")
        {
            path = [[NSBundle mainBundle] pathForResource:@"fr" ofType:@"lproj"];
        }
        NSBundle* languageBundle = [NSBundle bundleWithPath:path];

        //find and return the desired string
        NSString* str=[languageBundle localizedStringForKey:key value:@"" table:nil];
        return str;
    }
    -(void)setLanguageSpecificItems
    {
        myUIImageView1.image = [UIImage imageNamed:[self languageSelectedStringForKey:@"myUIImageView1"]];
        myLabel1.text = [self languageSelectedStringForKey:@"myLabel1"];
    }

-

みんな助けてくれてありがとう!!!

-クリス・アリンソン

于 2012-08-27T21:01:28.683 に答える