发布网友 发布时间:2022-04-26 09:03
共1个回答
热心网友 时间:2022-06-26 08:02
作者:fiskz
链接:http://www.hu.com/question/38346765/answer/79205418
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
关于iOS国际化处理,
1.文字国际化
在特定的语言基础上添加对应的语言包。用NSLocalizedString来获取对应的语言。
获取当前语言
NSArray * allLanguages = [defaults objectForKey:@"AppleLanguages"];
NSString * CURR_LANG = [allLanguages objectAtIndex:0];
判断当前语言是否是要适配的语言
if (![CURR_LANG hasPrefix:@"en"] && ![CURR_LANG hasPrefix:@"zh"])
{
NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle * languageBundle = [NSBundle bundleWithPath:path];
s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
}
s就是当前非中文或者英文下的语言,当前可以把英文去掉,因为判断不判断英文都是要处理成英文的。显示如下
if ( ![CURR_LANG hasPrefix:@"zh"])
{
NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle * languageBundle = [NSBundle bundleWithPath:path];
s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
}
对于zh,可以判定是中文简体,中文繁体。所以这里就配置了中文。
2.图片国际化
图片国际化在添加对应的图片语言即可。但是,要显示如题的问题的时候就处理不好了。可以按照文字的方式来处理这些图片国际化。
[[UIImageView alloc]initWithImage:[UIImage imageNamed:NSLocalizedString(@"XXX_XXX_XX"),nil]];
在特定的语言下写入对应的key和value就可以了。
3.标题国际化
目前还没有比较好的形式来处理标题国际化
用最简单最粗暴的方式来解决这个问题,那就是把所有常用的语言都写入,然后把标题修改成英文。
总结,上面的这些国际化可以作为一个工具类来使用,可以写成一个宏。每次调用都可以重复使用。