关于iOS 的国际化适配,主要有以下几点:
一、语言适配 Localizable.strings文件
该文件主要用于字符串的多语言版本,包括Localizable.strings(English), Localizable.strings(Chinese(Simplified)), Localizable.strings(Chinese(Traditional))等多个版本,使用不同的文件名称,内容取相同的key名称,对应不同的值。文件中具体内容格式如下:
//Localizable.string(English)
"TEXT_CANCEL"="Cancel";//取消
"TEXT_BACK"="Back";//返回
"TEXT_SEND"="Send";//发送
// Localizable.strings(Chinese(Simplified))
"TEXT_CANCEL"="取消";//取消
"TEXT_BACK"="返回";//返回
"TEXT_SEND"="发送";//发送
// Localizable.strings(Chinese(Traditional))
"TEXT_CANCEL"="取消";//取消
"TEXT_BACK"="返回";//返回
"TEXT_SEND"="發送";//发送
二、图片适配
有两种方式:
(1)在不同语言的Localizable.strings中指定不同的图片名称,通过NSLocalizedString()获取不同的图片名称后进行显示不同的图片
(2)参照国际化应用名和文字的方式给图片标记两种不同的语言显示 ,要注意命名带上各国家的对应的编码表示
一般涉及到多语言适配问题,我们会先判断当前使用的语言类型。
获取iOS系统的语言类型可使用:
NSArray*languages = [NSLocale preferredLanguages];// 获取语言字段NSString*curLanguage = [languages firstObject];// 获取当前使用语言
对于curLanguage的值,iOS9在其中增加了地区代码。如简体中文,在iOS9之前为@”zh-Hans”,而在iOS9中为@”zh-Hans-CN”。所以iOS9之前的一些判断如
[curLanguage isEqualToString:@"zh-Hans"]
在iOS9之后就会有问题,可使用
[curLanguage hasPrefix:@"zh-Hans"]
来代替。如下:
// 当前语言是否中文简体
-#defineisZhHans [[[NSLocale preferredLanguages] firstObject] isEqualToString:@"zh-Hans"]
+#defineisZhHans [[[NSLocale preferredLanguages] firstObject] hasPrefix:@"zh-Hans"]
// 当前语言是否为中文繁体
-#defineisZhHant [[[NSLocale preferredLanguages] firstObject] isEqualToString:@"zh-Hant"]
+#defineisZhHant [[[NSLocale preferredLanguages] firstObject] hasPrefix:@"zh-Hant"]
// 当前语言是否为中文繁体香港
-#defineisZhHK [[[NSLocale preferredLanguages] firstObject] isEqualToString:@"zh-HK"]
+#defineisZhHK [[[NSLocale preferredLanguages] firstObject] hasPrefix:@"zh-HK"]
获取地区代码
NSLocale *locale=[NSLocale currentLocale];
[locale localeIdentifier];
网友评论