前要: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:
點選韓語: