Localization is the process of translating your app into multiple languages. But before you can localize your app, you internationalize it. Internationalization is the process of making your app able to adapt to different languages, regions, and cultures. Because a single language can be used in multiple parts of the world, your app should adapt to the regional and cultural conventions of where a person resides. An internationalized app appears as if it is a native app in all the languages and regions it supports. https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPInternational/Introduction/Introduction.html#//apple_ref/doc/uid/10000171i
开发规范:始终把面向用户的字符串用 NSLocalizedString 包起来。
如果要添加本地化功能,需要为每种支持的语言创建一个子目录,称为”本地化文件夹”,通常使用.lproj作为拓展名。
在这里插入图片描述
当本地化的应用程序需要载入某一资源时,如图像、属性列表、nib文件,应用程序会检查用户的语言和地区,并查找相匹配的本地化文件夹。如果找到了相应的文件夹,就会载入这个文件夹中的资源。
NSLocale实例包含了针对这个地区内特定一群人的所有语言文化基准,其中包括:
每一个NSLocale实例对应着一个_地区标识符_,例如en_US,fr_FR,ja_JP和en_GB。
标识符包含一个语言码(例如en代表英语)和一个地区码,例如US代表美国。
原理:在%和@中间加上数值
,2$),数字代表参数的顺序 文章:https://blog.csdn.net/z929118967/article/details/108793150
从CSDN下载【iOS APP 内的国际化切换】demo源码:https://download.csdn.net/download/u011018979/19089505 文章:https://kunnan.blog.csdn.net/article/details/103733872原理:1、自定义解析本地化字符串的工具类LanguageManager 2、应用内切换语言生效的技术实现:采用销毁根控制器,重新进入一次 3、本地化字符串指定参数顺序
划重点
1、字符串的本地化 2、自定义解析本地化字符串的工具类LanguageManager、 3、例子:登录界面切换中英文(内含demo)
应用内切换语言生效的技术实现:
1、销毁根控制器,重新进入一次(采用) 2、通过发通知,到各个控制器更新文字(不采用)
使用NSDateFormatter和NSNumberFormatter时需要设置 NSLocale,这样做能确保日期、数字和货币能根据用户设置的地点信息显示正确的格式。
iOS小技能:时间格式化 https://blog.csdn.net/z929118967/article/details/124838767
- (NSDate*) dateFromString:(NSString*)stringTime dateformatter:(NSString*)dateformatter localeIdentifier:(NSString*)localeIdentifier {
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
#warning 真机调试,转换时间 需要设置 NSLocale
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier];//zh_CN en_US en_GB
[formatter setLocale:usLocale];
formatter.dateFormat = dateformatter;
return [formatter dateFromString:stringTime];
}
- (NSString*) stringFromDate:(NSDate*)date dateformatter:(NSString*)dateformatter localeIdentifier:(NSString*)localeIdentifier {
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
#warning 真机调试,转换时间 需要设置 NSLocale
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier];//zh_CN en_US en_GB
[formatter setLocale:usLocale];
formatter.dateFormat = dateformatter;
return [formatter stringFromDate:date];
}
//1. 设置日期键盘类型
UIDatePicker *datePicker = [[UIDatePicker alloc]init];
[datePicker setDatePickerMode:UIDatePickerModeTime];
NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"zh"];
[datePicker setLocale:locale];//本地化
//2. 设置日期格式
NSDateFormatter *dateF = [[NSDateFormatter alloc]init];
[dateF setLocale:locale];
[dateF setDateFormat:@"HH:mm"];
NSDate *date = [dateF dateFromString:@"01:00"];//设置默认日期
[datePicker setDate:date animated:YES];
nib本地化前的准备:先创建本地化文件夹(zh-Hans.lproj),让应用程序支持对应的语言环境,并选择选择当前需要本地化的
在这里插入图片描述
图片本地化的应用场景:不同的语言登录显示对应的图片
在这里插入图片描述
https://blog.csdn.net/z929118967/article/details/90727365
国际化app相关的权限弹框
在这里插入图片描述
https://blog.csdn.net/z929118967/article/details/92388239
应用场景:解决部分英文国际化没有生效的问题
思路:存储国际化英文字符串的.string文件长度受限,需修改逻辑拆分子文件存储。
文章:https://blog.csdn.net/z929118967/article/details/104300695
NSLocale +preferredLanguages
会根据用户的偏好返回一个IETF BCP 47 语言标识符的字符串数组。可以用这些值来定义HTTP头里面的Accept-Language字段,服务器就能选择相应的本地化资。
[request setValue:[NSString stringWithFormat:@"%@", [[NSLocale preferredLanguages] componentsJoinedByString:@", "]], forHTTPHeaderField:@"Accept-Language"];
https://kunnan.blog.csdn.net/article/details/103902362
在这里插入图片描述
genstrings
从 C 或 Objective-C(.c 或 .m)的源代码文件生成一个 .strings 文件。一个 .strings 文件用于为应用程序的不同语言作本地化。genstrings ViewController.m
genstrings苹果推出的一个用于自动从代码的
NSLocalizedString
提取生成国际化字符串的工具,genstrings 会浏览每个所选的源文件,以及每个使用 NSLocalizedString 的源文件,把键和注释追加到目标文件。
NSLocalizedStringFromTable(key, tbl, comment)
来获取字符串,资源文件会以tbl参数作为文件名。https://blog.csdn.net/z929118967/article/details/90727365
iOS处理语言工具CFStringTransform :智能地处理用户的输入内容,经典应用场景【索引】https://blog.csdn.net/z929118967/article/details/75003548
更多内容请关注 #小程序:iOS逆向
,只为你呈现有价值的信息,专注于移动端技术研究领域;更多服务和咨询请关注#公众号:iOS逆向
。
#define NSLocalizedString(key, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]