iOS

iOS国际化

2018-08-06  本文已影响0人  wxkkkkk

相关问题

国际化官网链接

  1. Infoplist.strings为什么可以替换info.plist的名称?什么时机替换的?为什么必须叫InfoPlist.strings?

有关信息属性列表的完整说明,请参阅信息属性列表键参考

  1. 多target国际化添加说明
按名字对应勾选target
  1. Localizable.strings == 匹配系统宏
  1. 自定义文字国际化,方法参数说明
参数
key
指定表中字符串的键。
tableName
包含键值对的表的名称。此外,字符串文件的后缀(具有.strings扩展名的文件)用于存储本地化字符串。
comment
注释放在字符串文件中的键值对之上。
#define NSLocalizedStringFromTable(key, tbl, comment)
  1. 两种启动图国际化,各有各的问题,启动图缓存问题
    缓存图片需要删除APP再安装
    黑屏问题
  1. Xib存在的问题:不能时时变换;&& 我们的工程不能用
  1. 不同系统适配问题

做指定语言切换开发与测试过程中最好使用真机代替模拟器,避免同语言在模拟器读取语言不准确。比如简体中文环境下,模拟器11.4版本iPhone8:“zh-Hans-US”,真机11.2.1版本iPhoneX:“zh-Hans-CN”。

由外到内的顺序进行国际化配置,文章最后会有demo与语言切换的简单工具类。

1.APP名称国际化

InfoPlist.strings文件中,定义key和value.

<key>CFBundleDevelopmentRegion</key> 
<string>en</string>

关于CFBundleDevelopmentRegion
官网: CFBundleDevelopmentRegion (String - iOS, OS X) specifies the default language and region for the bundle, as a language ID. For example, English for the United Kingdom has the language ID en-UK. The system uses this value if it cannot locate a resource for the user’s preferred language.
翻译:CFBundleDevelopmentRegion(String - iOS,OS X)指定的默认语言和区域包,作为一种语言ID。例如,英国英语语言ID en-UK。系统使用这个值如果不能找到一个资源用户的首选语言。

关于Base文件
Base多语言默认文件,被其它多语言 (Chinese, English, ...) 继承和覆盖,不会被iOS直接使用,只有当对应的多语言文件中没有找到相应条目时才会到Base中查找,作用跟函数参数的默认值差不多。
查找原理App启动时,iOS会遍历用户设定的语言优先级去和App的多语言文件匹配如果匹配,会使用对应的语言如果不匹配,会使用plist中开发地区所对应的语言。

名称-7.png

2.系统权限提示语国际化

InfoPlist.strings文件中,定义key和value.
关于系统权限提示语的国际化,和设置APP名称一样需要在InfoPlist.strings文件里配置。

配置好系统在不同语言环境下的权限提示就会显示所对应的提示语。一批访问权限的对应字段。

NSBluetoothPeripheralUsageDescription   访问蓝牙
NSCalendarsUsageDescription   访问日历
NSCameraUsageDescription   相机
NSPhotoLibraryUsageDescription   相册
NSContactsUsageDescription   通讯录
NSLocationAlwaysUsageDescription   始终访问位置
NSLocationUsageDescription   位置
NSLocationWhenInUseUsageDescription   在使用期间访问位置
NSMicrophoneUsageDescription   麦克风
NSAppleMusicUsageDescription   访问媒体资料库
NSHealthShareUsageDescription   访问健康分享
NSHealthUpdateUsageDescription   访问健康更新
NSMotionUsageDescription   访问运动与健身
NSRemindersUsageDescription   访问提醒事项

3.语言与图片国际化

简单情况(APP初期开发或个人开发是国际化处理)

- (void)viewDidLoad {
    [super viewDidLoad];
    self.titleLabel.text = NSLocalizedString(@"title", nil);
}

简单的图片国际化与上述文字国际化是一样的,就是根据一样的图片key对应展示不同的图片value,就不上图片了 比如这样:

//  Localizable.strings文件中
"title" = "中文简体标题";
"imageKey" = "image_simplified";

//  Localizable.strings文件中
"title" = "香港繁體標題";
"imageKey" = "image_traditional";

// 控制器里设置控件
UIImage * iamge = [UIImage imageNamed:NSLocalizedString(@"imageKey", nil)];


多人开发/后期国际化
生成不同的.strings文件,使用系统的宏定义从不同文件中获取国际化文本

#define NSLocalizedStringFromTable(key, tbl, comment) \
        [NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:(tbl)]
A-B两个不同strings文件

使用NSLocalizedStringFromTable定义国际化文本。

NSString *nameStr = NSLocalizedStringFromTable(@"name", @"XesA", nil);
    self.titleLabel.text = nameStr;

4.启动图国际化

(启动图国际化如果切换语言后无法达到显示结果,需要删除APP再次运行)

strings文件里的启动图配置

"UILaunchStoryboardName" = "LaunchS_Chine";
"UILaunchStoryboardName" = "LaunchS_HKHK";

5.xib国际化

xib国际化比较麻烦,因为生成xib对应的.strings文件后,再更改时不能动态修改对应的.strings文件,还需要重置此文件,笨方法就是先制作好了xib 最后再对应生成不同环境下的.strings文件,还有就是使用脚本动态生成国际化内容。(待研究学习...)

也可以把xib里的控件与其控制器关联,在控制器中再进行国际化文本处理。


6.获取本地语言与语言切换

在做获取本地语言与语言切换功能时,最好使用真机测试比较准确,比如同样系统下的模拟器与真机获取简体中文就会有偏差,模拟器的简体中文为zh-Hans-US,真机为zh-Hans-CN,虽然都可以表示简体中文 但会有偏差。

// 获取当前语言环境
// 方法一
 NSArray *languageArry = [NSLocale preferredLanguages];
 NSString *currentLanguage = [languageArry objectAtIndex:0];

// 方法二
 NSArray * languageArry = [[NSUserDefaults standardUserDefaults]  objectForKey:@"AppleLanguages"];
 NSString * currentLanguage = [allLanguages objectAtIndex:0];

// 获取当前设备支持语言数组
NSArray *languageArr = [NSLocale availableLocaleIdentifiers];

更改当前APP所属语言环境(语言切换)只需要在NSUserDefaults下的keyAppleLanguages赋相应的语言代码就好。
比如把当前app语言环境改成英文。

[[NSUserDefaults standardUserDefaults] setObject:@"en-US" forKey:@"AppleLanguages"];
[[NSUserDefaults standardUserDefaults] synchronize];
切换语言时的常见思路

国际化语言适配问题笔记
iOS8  
简体中文:zh-Hans
繁体中文香港:zh-HK

iOS9    
简体中文: zh-Hans-CN
香港繁体  : zh-HK

iOS10及以上
简体中文   zh-Hans-CN
香港繁体: zh-Hant-HK

官网国际化指南

上一篇下一篇

猜你喜欢

热点阅读