从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、通过发通知,到各个控制器更新文字(不推荐)
在这里插入图片描述
选 make Localize代表会将Localizable.strings加入到英语的本地化文件夹en.lproj中去
在这里插入图片描述
Localizable.strings(English)对应en.lproj文件夹中的Localizable.strings文件 Localizable.strings(Chinese)对应zh-Hans.lproj文件夹中的Localizable.strings文件
en.lproj/Localizable.strings
static NSString * const kSystem = @"SystemDefault";
static NSString * const kCH = @"zh-Hans";
static NSString * const kEN = @"en";
static NSString * const kProj = @"lproj";
static NSString * const kLanguageSet = @"kLanguageSet";
"Connected" = "Connected";
"Tip"="Tip";
zh-Hans.lproj/Localizable.strings
"Connected" = "已连接";
"Tip"="提示";
在这里插入图片描述
#define NSLocalizedString(key, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]
#define NSLocalizedStringFromTable(key, tbl, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment) \
[bundle localizedStringForKey:(key) value:@"" table:(tbl)]
#define NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment) \
[bundle localizedStringForKey:(key) value:(val) table:(tbl)]
这里使用封装的宏进行读取本地化字符串
//程序的本地化,引用国际化的文件
#define QCTLocal(x, ...) HZLocalizedString(x, nil)
#define HZLocalizedString(key, comment) HZLocalizedStringFromTable(key, @"Localizable", nil)
#define HZLocalizedStringFromTable(key, tbl, comment) [[HZLanguageManager defaultManager] stringWithKey:key table:tbl]
/**
国际化
@param key <#key description#>
@param table Localizable
@return <#return value description#>
*/
- (NSString *)stringWithKey:(NSString *)key table:(NSString *)table
{
//假如为跟随系统
if (self.languageType==HZLanguageTypeSystem) {
return NSLocalizedString(key, nil);
}
//返回对应国际化文字
if (_bundle) {
return NSLocalizedStringFromTableInBundle(key, table, _bundle, nil);
}
return NSLocalizedStringFromTable(key, table, nil);
}
// 使用QCTLocal读取本地化字符串
[LBAlertController showAlertTitle:QCTLocal(@"tips") content:QCTLocal(@"str_cann_printer") cancelString:QCTLocal(@"cancel") cancleBlock:nil sureString:QCTLocal(@"sure") sureBlock:^{
如果没有对字符串进行本地化 或者 找不到key对应的值,NSLocalizedString将直接返回key这个字符串
对于在中英文语法的区别,在本地化字符串的时候,我们常常需要调整stringWithFormat的参数顺序
文章:https://kunnan.blog.csdn.net/article/details/108793150 原理:在%和@中间加上数值(1,2$),数字代表参数的顺序
"FORMAT" = "I am %2$@ from '%1$@'";
从CSDN下载【iOS APP 内的国际化切换】demo源码:https://download.csdn.net/download/u011018979/19089505