标签:
今日学习了语言本地化完整的流程,撰此文以记之。
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对应。
标签:
原文地址:http://www.cnblogs.com/siyuan123/p/5570852.html