IOS開發(fā)之App語言國際化,內(nèi)部切換中英文等

今天項(xiàng)目中添加了一個(gè)需求,App設(shè)置中有個(gè)語言切換,需要實(shí)現(xiàn)的效果是中英繁切換,針對(duì)APP國際化進(jìn)行操作,使APP內(nèi)部控件顯示語言可以不隨系統(tǒng)語言做改變,自由切換:效果簡(jiǎn)約如下:


切換中英文顯示

核心方法:

NSLocalizedStringFromTable(<#key#>,<#tbl#>,<#comment#>)

原理即在工程內(nèi)部建立 .String,在內(nèi)部采用鍵值對(duì)方式對(duì)所需要切換語言的文字進(jìn)行賦值

1.工程內(nèi)部創(chuàng)建.String文件,命名為L(zhǎng)anguage.String


2.右側(cè)菜單欄點(diǎn)擊Localize,彈出菜單選擇English,確定



3.第二步結(jié)束后選擇工程,選擇PROJECT,下方Localizations菜單中點(diǎn)擊+號(hào)選擇添加中文


4.此時(shí)Language.String中會(huì)顯示兩個(gè)文件,Language.String(Chinese) 和 Language.String(English),這一步像這兩個(gè)文件中添加鍵值對(duì)


英文文件中:

"denglu" = "Login";

"account" = "Phone number/email address";

"password" = "Password";

"verification" = "Verification code";

"message" = "SMS verification code";

"forget" = "Forget?";

"newregist" = "Registration";

"question" = "Problems";

中文文件中:

"denglu" = "登錄";

"account" = "請(qǐng)輸入手機(jī)號(hào)/郵箱";

"password" = "請(qǐng)輸入登錄密碼";

"verification" = "請(qǐng)輸入驗(yàn)證碼";

"message" = "通過短信驗(yàn)證碼登錄";

"forget" = "忘記密碼?";

"newregist" = "新用戶注冊(cè)";

"question" = "常見問題";

5.新建一個(gè)單例類,ChangeLanguage,.h中添加屬性方法

#import <Foundation/Foundation.h>

@interface ChangeLanguage:NSObject

#define FGGetStringWithKeyFromTable(key, tbl)? [[ChangeLanguage sharedInstance] getStringForKey:key withTable:tbl]

@property(nonatomic,strong)NSString * language;

+(id)sharedInstance;

/**

*? 返回table中指定的key的值

*

*? @param key? key

*? @param table table

*

*? @return 返回table中指定的key的值

*/

-(NSString *)getStringForKey:(NSString *)key withTable:(NSString *)table;

/**

*? 改變當(dāng)前語言

*/

-(void)changeNowLanguage;

/**

*? 設(shè)置新的語言

*

*? @param language 新語言

*/

-(void)setNewLanguage:(NSString *)language;

@end

6.在.m中實(shí)現(xiàn)方法:

#import"ChangeLanguage.h"

#import"AppDelegate.h"

#define CNS @"zh-Hans"

#define EN @"en"

#define LANGUAGE_SET @"langeuageset"

@interface ChangeLanguage()

@property(nonatomic,strong)NSBundle * bundle;

@end

@implementation ChangeLanguage

static ChangeLanguage * sharedModel;

+(id)sharedInstance{

? ? if(!sharedModel){

? ? ? ? sharedModel=[[ChangeLanguage alloc]init];

? ? }

? ? ? ? return sharedModel;

? ?}

-(instancetype)init{

? ? self=[super init];

? ? if(self){

? ? ? ?[self initLanguage];

? ? }

? ? return self;

}

-(void)initLanguage{

? ? NSString*tmp=[[NSUserDefaults standardUserDefaults]objectForKey:LANGUAGE_SET];

? ? NSString*path;

? ? //默認(rèn)是中文?

? ? if([tmp isEqualToString:CNS]||!tmp){

? ? ? ? tmp=CNS;

? ? }else{

? ? ? ? tmp=EN;

? ?}

? ?self.language=tmp;//更改之前語言

? ?path=[[NSBundle mainBundle]pathForResource:self.language ofType:@"lproj"];

? ?self.bundle=[NSBundle bundleWithPath:path];

}

-(NSString*)getStringForKey:(NSString*)key withTable:(NSString*)table{

? ? if(self.bundle){

? ? ? ?return NSLocalizedStringFromTableInBundle(key,table,self.bundle,@"");

? ?}

? ? ? return NSLocalizedStringFromTable(key,table,@"");

}

-(void)changeNowLanguage{

? ?if([self.language isEqualToString:EN]){

? ? ? [self setNewLanguage:CNS];

}else{

? ? ? [self setNewLanguage:EN];

? ? ? ?}

}

-(void)setNewLanguage:(NSString*)language{

? ? ? if([language isEqualToString:self.language]){

? ? ? ? ?return;

? ? ?}

? ? //找到需要改成的語言路徑

? ?if([language isEqualToString:EN]||[language isEqualToString:CNS]){

? ? ? ?NSString*path=[[NSBundle mainBundle]pathForResource:language ofType:@"lproj"];

? ? ? ?self.bundle=[NSBundle bundleWithPath:path];

? }

? self.language=language;NSLog(@"%@",language);

? [[NSUserDefaults standardUserDefaults]setObject:language forKey:LANGUAGE_SET];

? [[NSUserDefaults standardUserDefaults]synchronize];

? [self resetRootViewController];

}

//重新設(shè)置

-(void)resetRootViewController{

? ? ? ?AppDelegate * appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];

? ? ? ?UIStoryboard * SB=[UIStoryboard storyboardWithName:@"Main"bundle:nil];

? ? ? ?UITabBarController * tabBarController=[SB

instantiateViewControllerWithIdentifier:@"tabBarController"];

? ? ? ?tabBarController=(UITabBarController *)appDelegate.window.rootViewController;

}

@end

7.具體使用:在具體方法中先調(diào)用changeNowLanguage方法,然后用FGGetStringWithKeyFromTable賦值即可;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容