iOS 支持中文和英文的语言本地化

今日学习了语言本地化完整的流程,撰此文以记之。

一、创建.strings文件,并本地化。

1、新建项目,创建.strings文件。

2.本地化 

3.添加支持的语言

选中PROJECT下的项目->Localization -> 点击+添加。这里添加简体中文的.strings文件。

勾选三个文件,项目中就会创建名为Language.strings(Chinese(Simplified))文件。

finder中项目目录下就会创建名为zh-Hans.lproj文件夹。

同样的方式可以创建English.strings。

二、语言本地化的使用

1.在Language.strings(Chinese(Simplified))文件和Language.strings(English)文件中添加键值对。

 

2.在代码中本地化的使用方式。

搭建UI,添加UILabel在storyboard上,用于在不同系统语言的情况下展示所显示的文字。

 

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    //1.获取系统当前语言
    NSArray *languages = [NSLocale preferredLanguages];
    NSLog(@"languages==%@",languages);
    NSString *currentLan = [languages firstObject];
    NSRange range = [currentLan rangeOfString:@"-C"];
    NSString *string = [currentLan substringToIndex:range.location];
    [[NSUserDefaults standardUserDefaults]setObject:string forKey:@"language"];
}

 ViewController.m

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *Lab;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //1.获取当前语言
    NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:@"language"];
    
    //2.获取当前语言的文件
    NSString *pathStr = [[NSBundle mainBundle]pathForResource:name ofType:@"lproj"];
    
    //3.根据key转换为当前语言。key为.strings文件中的键名 table:为.strings文件名
    NSString *valueStr = [[NSBundle bundleWithPath:pathStr] localizedStringForKey:@"key" value:nil table:@"Language"];
    
    self.Lab.text = valueStr;
}

建议ViewController.m文件中的代码写成全局宏定义,因为在很多地方可以用到。宏定义及使用如下:

#define Localize(key)  [[NSBundle bundleWithPath:[[NSBundle mainBundle]pathForResource:[[NSUserDefaults standardUserDefaults] objectForKey:@"language"] ofType:@"lproj"]] localizedStringForKey:(key) value:nil table:@"Language"];

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *Lab;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSString *value = Localize(@"key");
    self.Lab.text = value;
}

3.效果图手机系统语言分别设置为简体中文和英文。

注:

获取系统语言时

NSArray *languages = [NSLocale preferredLanguages];
NSLog(@"languages==%@",languages); NSString *currentLan = [languages firstObject];
languages数组

打印结果:

 

这里的内容是和手机->设置->通用->语言和地区页面中PREFEREND LANGUAGED对应。

 

posted @ 2016-06-12 11:10  思园  阅读(851)  评论(0编辑  收藏  举报