iOS之多语言开发
前要:iOS多語言開發,可以分為兩種
系統設置,通過在手機設置中切換語言,進而改變app中語言;
app中手動切換,用戶在app中,手動選擇語言,進行切換。
一.添加需要的語言
不管使用哪種方法,都需要先添加語言,這一點是相同的。
在項目的project中添加語言
添加完成后是這樣的
創建Localizable.strings 文件
文件名是 Localizable,也可以更改其它名,后面會講到
上面都完成后,項目是這樣的
在每個語言的.string文件中,把項目中的所有需顯示的文字,按照key-value 的形式放進去。
至此,所有的前置工作都完成了。
二. 代碼部分
1.使用系統設置切換語言
使用系統設置切換語言,比較簡單,直接上代碼:
1 NSArray *array = @[@"中文",@"英文",@"法語",@"韓語"];
2 for (int i=0; i<4; i++) {
3 UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
4 btn.frame = CGRectMake(100, 200+70*i, 200, 40);
5 btn.backgroundColor = [UIColor orangeColor];
6
7 //第一種:使用系統設置語言
8 [btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal];
9
10 [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
11 [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
12 btn.tag = i+10;
13 [self.view addSubview:btn];
14 }
直接使用NSLocalizedString(key, comment)方法,“key”就是Localizable.strings文件中的我們設置的key, “comment”寫niu即可
如此,只要在手機 設置-通用-語言與地區 中,切換語言,再打開app,app中文字就會切換成對應的語言。
2.app中手動切換語言
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *array = @[@"中文",@"英文",@"法語",@"韓語"];
for (int i=0; i<4; i++) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(100, 200+70*i, 200, 40);
btn.backgroundColor = [UIColor orangeColor];
//第一種:使用系統設置語言
//[btn setTitle:NSLocalizedString(array[i], nil) forState:UIControlStateNormal];
//第二種,app中手動選擇語言
[btn setTitle:KLanguage(array[i]) forState:UIControlStateNormal];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
btn.tag = i+10;
[self.view addSubview:btn];
}
}
-(void)btnClick:(UIButton *)btn{
NSInteger tag = btn.tag-10;
if (tag==0) {
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
}else if(tag==1){
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}else if (tag==2){
[[NSUserDefaults standardUserDefaults] setObject:@"fr" forKey:@"appLanguage"];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"ko" forKey:@"appLanguage"];
}
[[NSUserDefaults standardUserDefaults]synchronize];
UIWindow *window = [UIApplication sharedApplication].delegate.window;
[UIView animateWithDuration:0.4f animations:^{
CGAffineTransform curent = window.transform;
CGAffineTransform scale = CGAffineTransformScale(curent, 0.0001,0.0001);
[window setTransform:scale];
} completion:^(BOOL finished) {
exit(0);
}];
}
每次選擇語言后,保存到本地
這里用了一個宏:
#define KLanguage(key) [[NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"appLanguage"]] ofType:@"lproj"]] localizedStringForKey:key value:nil table:@"Localizable"]
"appLanguage":將選擇的語言保存在本地,本地偏好設置保存用的key,
"Localizable":這就是我們創建的Localizable.strings文件名。也可以用其它名字,只要與宏里的保持一致即可。
每種語言對應的字符串:
首次進入app,使用系統默認的語言:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//首次進入app,設置語言。自己根據實際情況,設置剛進入app的默認語言
NSString *currentLanguage = [[NSUserDefaults standardUserDefaults]objectForKey:@"appLanguage"];
if (!currentLanguage) {
//獲得當前語言
NSArray *languages = [NSLocale preferredLanguages];
NSString *language = [languages objectAtIndex:0];
if([language hasPrefix:@"en"]){
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}else if([language hasPrefix:@"zh-Hans"]){
[[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:@"appLanguage"];
}else{
[[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:@"appLanguage"];
}
[[NSUserDefaults standardUserDefaults]synchronize];
}
[self.window makeKeyAndVisible];
return YES;
}
代碼演示:
進入app:
點擊英文,重新進入app:
點擊韓語:
總結
- 上一篇: 移动 App 应用测试方法与思路
- 下一篇: 生活常识:如何正确使用洗衣皂?