是否可以使用像.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?
答案 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);
}