很多项目在面向国外的时候,都需要在项目里做好国际化,也就是切换不同语言,一般可切换中英文两种,当然也有可能有其他语言,这里以切换中英文为例。当了解了切换中英文,增加其他语言的时候,就只需要增加翻译文件了。
Step1、添加string翻译文件,并命名为Language
Step2、在project-》info里找到Localizations里点击左下角的“+”,找到English英语和Chinese,Simplified中文简体,点击选中再选择Language,等添加后如下图:
Step3、增加Language.string翻译文件的内容,当选中Language(English)时,可增加以下内容:
"账号" = "Account";
"密码" = "Password";
"登录" = "Log in";
"还没有账号?" = "Don't have an account yet?";
"注册" = "Register";
当选中Language(Chinese,Simplified)时,可增加以下内容:
"账号" = "账号";
"密码" = "密码";
"登录" = "登录";
"还没有账号?" = "还没有账号?";
"注册" = "注册";
Step4、新建ACChangeLanguage工具类
.h文件
#import <Foundation/Foundation.h>
#define LocalLanguageKey @"LocalLanguageKey" //选择语言
NS_ASSUME_NONNULL_BEGIN
@interface ACChangeLanguage : NSObject
+(NSBundle *)bundle;//获取当前资源文件
+(void)initUserLanguage;//初始化语言文件
+(NSString *)getCurrentLanguage;//获取应用当前语言
+(void)setUserlanguage:(NSString *)language;//设置当前语言
@end
NS_ASSUME_NONNULL_END
.m文件
#import "ACChangeLanguage.h"
@implementation ACChangeLanguage
static NSBundle *bundle = nil;
+ ( NSBundle * )bundle{
return bundle;
}
//首次加载的时候先检测语言是否存在
+(void)initUserLanguage{
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSString *currLanguage = [def valueForKey:LocalLanguageKey];
if(!currLanguage){
currLanguage = @"en";
NSArray *preferredLanguages = [NSLocale preferredLanguages];
currLanguage = preferredLanguages[0];
if ([currLanguage hasPrefix:@"en"]) {
currLanguage = @"en";
} else if ([currLanguage hasPrefix:@"zh"]) {
currLanguage = @"zh-Hans";
} else {
currLanguage = @"en";
}
[def setValue:currLanguage forKey:LocalLanguageKey];
[def synchronize];
}
//获取文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:currLanguage ofType:@"lproj"];
bundle = [NSBundle bundleWithPath:path];//生成bundle
}
//获取当前语言
+(NSString *)getCurrentLanguage{
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSString *language = [def valueForKey:LocalLanguageKey];
return language;
}
// 设置语言
+(void)setUserlanguage:(NSString *)language{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *currLanguage = [userDefaults valueForKey:LocalLanguageKey];
if ([currLanguage isEqualToString:language]) {
return;
}
[userDefaults setValue:language forKey:LocalLanguageKey];
[userDefaults synchronize];
NSString *path = [[NSBundle mainBundle] pathForResource:language ofType:@"lproj" ];
bundle = [NSBundle bundleWithPath:path];
}
@end
Step5、在需要切换语言的地方导入头文件和预定义
#import "ACChangeLanguage.h"
#define LocalizationKey(key) [[ACChangeLanguage bundle] localizedStringForKey:key value:nil table:@"Language"]
然后,在相应的点击事件中去调用以及刷新UI
- (IBAction)flagBtnAction:(UIButton *)sender {
self.changeLanguageTipView.hidden = NO;
}
- (IBAction)englishBtnAction:(UIButton *)sender {
self.flagImageView.image = [UIImage imageNamed:@"flagEnglish"];
[ACChangeLanguage setUserlanguage:@"en"];
[self resetUIAction];
}
- (IBAction)chineseBtnAction:(UIButton *)sender {
self.flagImageView.image = [UIImage imageNamed:@"flagChinese"];
[ACChangeLanguage setUserlanguage:@"zh-Hans"];
[self resetUIAction];
}
- (void)resetUIAction {
if ([[ACChangeLanguage getCurrentLanguage] isEqualToString:@"en"]) {
self.flagImageView.image = [UIImage imageNamed:@"flagEnglish"];
} else if ([[ACChangeLanguage getCurrentLanguage] isEqualToString:@"zh-Hans"]) {
self.flagImageView.image = [UIImage imageNamed:@"flagChinese"];
}
self.changeLanguageTipView.hidden = YES;
self.accountTF.placeholder = LocalizationKey(@"账号");
self.passwordTF.placeholder = LocalizationKey(@"密码");
[self.logInBtn setTitle:LocalizationKey(@"登录") forState:UIControlStateNormal];
self.noAccountYetLabel.text = LocalizationKey(@"还没有账号?");
[self.registerBtn setTitle:LocalizationKey(@"注册") forState:UIControlStateNormal];
}