iOS|iOS - 国际化
手机程序的发展,是Mac、windows电脑程序的一个重复。原理: 文件 - xxxx.strings
如何实现iOS国际化,并可作为插件使用?
【iOS|iOS - 国际化】页面中需要支持多语言的文案,单独提取到xxxx.strings文件中
NSLocalizedStringFromTableInBundle
iOS中使用系统提供的方法NSLocalizedStringFromTableInBundle,从特定语言的文件夹中,找到xxxx.strings文件并读取对应文案
对podspec文件做配置
iOS组件使用CocoaPods打包时,对podspec文件做配置,将xxxx.strings打进组件包中
iOS系统对其他格式的文件(plist、json)的支持
iOS系统对info.plist、magic_config.json等,已经支持国际化配置功能
语言管理工具
依赖我们自己开发的工具SDK:TeString
App内重置语言
App内更换语言后,需要重新设置window的rootViewController
实施步骤:
xxxx.strings
xcode中,cmd+n,创建一个File,选择Strings File:
完成xxxx.strings创建后,打开xxxx.strings的多语言支持:
在Pods.xcodeproj工程中,添加对其他语言的支持:
注意:不使用base;pod install后,若此配置失效,需要重新执行这一步。
添加xxxx.strings的支持的语言:
添加其他格式的文件(plist、json、nib、txt、png)的多语言
在我们的组件中,以magic_config.json文件的形式,提供了可配置能力。
要求:magic_config.json中的可配置文字,需要提取出来,更新到xxx.strings文件中。
如果magic_config.json文件中有其他功能配置,也需要支持多语言的部分,可对该文件添加多语言支持,如下图:
还需要在finder中,将该文件删除,在en.lproj和zh-Hans.lproj中已经有一份:
info.plist的国际化支持
需要添加相同名字的strings文件,如infoPlist.strings,然后找到info中想要修改的key,添加不同语言的value。
例:
在InfoPlist.strings(Chinese(Simplified))添加:
/*权限声明*/
NSCameraUsageDescription = "用于打开相机";
NSContactsUsageDescription = "用于打开联系人";
NSLocationWhenInUseUsageDescription = "用于打开定位";
NSMicrophoneUsageDescription = "用于打开耳机";
NSPhotoLibraryUsageDescription = "用于打开相册";
在InfoPlist.strings(English)添加:
/*权限声明*/
NSCameraUsageDescription = "Used to open camera";
NSContactsUsageDescription = "Used to open contacts";
NSLocationWhenInUseUsageDescription = "Used to open location";
NSMicrophoneUsageDescription = "Used to open microphone";
NSPhotoLibraryUsageDescription = "Used to open photos";
对podspec文件做配置,将多语言文件打进包内:
注意:对原来的resources,添加'CWKit/**/*.lproj',不可是'CWKit/**/*.lproj/*.strings',会因为文件重名,进行覆盖,导致只有一份xxx.strings文件。
组件打包后,会看到xxx.Framework包文件中:
app运行时,可以看到mainbundle中已经有了组件的多语言文件,并统一合并到en.lproj和zh-Hans.lproj文件夹中:
使用TeString,在代码获取多语言文案
使用方法如下:
1、在podfile中添加对TeString的依赖:pod 'TeString'
2、头文件引用:#import
3、方法调用:TStringWithKeyFromTable(@"keyName",@"tableName");
参考文:https://www.jianshu.com/p/627da5a9992c、https://www.jianshu.com/p/f8edd7b7a217
推荐阅读
- 2020-04-07vue中Axios的封装和API接口的管理
- iOS中的Block
- 只要有一台手机,人人都可以是摄影师
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- 现代人的痛苦
- 一味地刷手机让你的效率越来越低下
- 接口|axios接口报错-参数类型错误解决