3分钟实现iOS语言本地化/国际化(图文教程)

2020-02-23 16:01:54于海丽

然后控制器中添加如下代码:

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  
  NSString *imageName = NSLocalizedString(@"icon", nil);
  UIImage *image = [UIImage imageNamed:imageName];
  self.imageView.image = image;
}

@end

english环境下运行效果如下:

中文环境改下运行效果如下:

其他语言环境,例如法语、中文繁体、韩语,操作步骤完全和上面相同。都是在对应的.Iproj文件夹下添加同名的图片,然后把图片拖放到Xcode中,不再赘述。

 (五)查看/切换本地语言

原理:应用启动时,首先会读取NSUserDefaults中的key为AppleLanguages对应的value,该value是一个String数组,也就是说,我们访问这个名为AppleLanguages的key可以返回一个string数组,该数组存储着APP支持的语言列表,数组的第一项为APP当前默认的语言。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  NSArray *languages = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
  NSString *currentLanguage = languages.firstObject;
  NSLog(@"模拟器当前语言:%@",currentLanguage);
}
@end

-控制台打印结果:

同理,既然我们可以通过AppleLanguages这个key从NSUserDefaults中取出语言数组,那么我们也可以给AppleLanguages这个key赋值来达到切换本地语言的效果,从此以后,我们就无需频繁的去模拟器的设置->通用->语言与地区 中切换语言。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  // 切换语言前
  NSArray *langArr1 = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
  NSString *language1 = langArr1.firstObject;
  NSLog(@"模拟器语言切换之前:%@",language1);
  
  // 切换语言
  NSArray *lans = @[@"en"];
  [[NSUserDefaults standardUserDefaults] setObject:lans forKey:@"AppleLanguages"];
  
  // 切换语言后
  NSArray *langArr2 = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
  NSString *language2 = langArr2.firstObject;
  NSLog(@"模拟器语言切换之后:%@",language2);
}
@end