是否可以使用类似Localizable.String的.String文件,但语言是否随按钮而变化?

时间:2016-11-04 13:43:21

标签: ios objective-c iphone xcode localizable.strings

是否可以使用像.String这样的Localizable.String文件,但语言是否会更改应用程序中的按钮而不是设置中的语言? 如果没有,有没有办法说明如何在EN语言中使用FR语言,例如:

在FR语言或EN语言中,我使用=> FXFormFieldTitle:NSLocalizedString(@"SMSInfo", @"")

分别我在FR localizable.String

中有那条线
/* 
  File.strings
  Formbox

  Created by OlostA on 04/11/2016.
  Copyright © 2016 NewTelApps. All rights reserved.
*/
"SMSInfo" = "Souhaitez-vous recevoir par sms les informations de la marque ?";

EN localizable.String中的那一行

/* 
  File.strings
  Formbox

  Created by OlostA on 04/11/2016.
  Copyright © 2016 NewTelApps. All rights reserved.
*/
"SMSInfo" = "Do you want to receive the brand informations by sms?";

那么问题。如果我使用FR语言,有没有办法在localizable.strings EN中使用SMSInfo?

1 个答案:

答案 0 :(得分:0)

是的,可以从app更改语言。

[LanguageManager saveLanguageByIndex:indexPath.row andCode:model.strLanguageCode];

LanguageManager.h

#import <Foundation/Foundation.h>

typedef NS_ENUM(NSInteger, ELanguage)
{
    ELanguageEnglish,
    ELanguageSpanish,
    ELanguageFrench,
    ELanguageGerman,
    ELanguageItalian,
    ELanguageArabic,
    ELanguageChinese,


    ELanguageCount
};

@interface LanguageManager : NSObject

+ (void)setupCurrentLanguage;
+ (NSArray *)languageStrings;
+ (NSString *)currentLanguageString;
+ (NSString *)currentLanguageCode;
+ (NSInteger)currentLanguageIndex;
+ (void)saveLanguageByIndex:(NSInteger)index andCode:(NSString *)strCode;
+ (BOOL)isCurrentLanguageRTL;

@end

LanguageManager.m

#import "LanguageManager.h"
#import "NSBundle+Language.h"


static NSString * const LanguageCodes[] = { @"en", @"es", @"fr", @"de",@"it",@"ar" ,@"zh-Hans"};
static NSString * const LanguageStrings[] = { @"English", @"Spanish", @"French", @"German",@"Italian",@"Arabic",@"Chinese"};
static NSString * const LanguageSaveKey = @"currentLanguageKey";

@implementation LanguageManager

+ (void)setupCurrentLanguage
{
    NSString *currentLanguage = [[NSUserDefaults standardUserDefaults] objectForKey:LanguageSaveKey];
    if (!currentLanguage) {
        NSArray *languages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"];
        if (languages.count > 0) {
            currentLanguage = languages[0];
            [[NSUserDefaults standardUserDefaults] setObject:currentLanguage forKey:LanguageSaveKey];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    }   
#ifndef USE_ON_FLY_LOCALIZATION
    [[NSUserDefaults standardUserDefaults] setObject:@[currentLanguage] forKey:@"AppleLanguages"];
    [[NSUserDefaults standardUserDefaults] synchronize];
#else
    [NSBundle setLanguage:currentLanguage];
#endif
}

+ (NSArray *)languageStrings
{
    NSMutableArray *array = [NSMutableArray array];
    for (NSInteger i = 0; i < ELanguageCount; ++i) {
        [array addObject:NSLocalizedString(LanguageStrings[i], @"")];
    }
    return [array copy];
}

+ (NSString *)currentLanguageString
{
    NSString *string = @"";
    NSString *currentCode = [[NSUserDefaults standardUserDefaults] objectForKey:LanguageSaveKey];
    for (NSInteger i = 0; i < ELanguageCount; ++i) {
        if ([currentCode isEqualToString:LanguageCodes[i]]) {
            string = NSLocalizedString(LanguageStrings[i], @"");
            break;
        }
    }
    return string;
}

+ (NSString *)currentLanguageCode
{
    return [[NSUserDefaults standardUserDefaults] objectForKey:LanguageSaveKey];
}

+ (NSInteger)currentLanguageIndex
{
    NSInteger index = 0;
    NSString *currentCode = [[NSUserDefaults standardUserDefaults] objectForKey:LanguageSaveKey];
    for (NSInteger i = 0; i < ELanguageCount; ++i) {
        if ([currentCode isEqualToString:LanguageCodes[i]]) {
            index = i;
            break;
        }
    }
    return index;
}

+ (void)saveLanguageByIndex:(NSInteger)index andCode:(NSString *)strCode
{
    if (index >= 0 && index < ELanguageCount) {
        [[NSUserDefaults standardUserDefaults] setObject:strCode forKey:LanguageSaveKey];
        [[NSUserDefaults standardUserDefaults] synchronize];
        [[NSUserDefaults standardUserDefaults] setObject:@[strCode] forKey:@"AppleLanguages"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        [NSBundle setLanguage:strCode];
    }
}

+ (BOOL)isCurrentLanguageRTL
{
    NSInteger currentLanguageIndex = [self currentLanguageIndex];
    return ([NSLocale characterDirectionForLanguage:LanguageCodes[currentLanguageIndex]] == NSLocaleLanguageDirectionRightToLeft);
}