iOS 本地化 - 包括插件的本地化
基础配置
- PROJECT - Localizations - language - 添加需要的本地化语言
- 使用 storyboard&xib,必须
Use Base Internationalization
本地化有
Base
和具体语言
可以选择
Base
就是通用语言,没有本地化处理的就用Base
Base
<=English
,当设置English
本地化时,Base
就被English
取代
- 默认项目文件应该存在
Base.lproj
文件夹,存放Base
本地资源 - 每新增一个本地化语言,都会多一个相关的文件夹,存放本地资源,比如
zh-Hans.lproj
为简体中文
APP 名称本地化
- 即对
info.plist
做本地化处理 info.plist
作为plist
文件,本身可以直接添加本地化处理,但是作为系统级别的不能直接处理- 对应的措施是,添加
InfoPlist.string
作为过渡,此文件可以本地化处理,属性中添加Localization
InfoPlist.string
会生成多个本地化文件,对应各个语言info.plist
可以Open As
-Source Code
,查看很多的Key
,比如CFBundleDisplayName
是 APP 显示名称- 编辑
InfoPlist.string
,key-value 的形式,不同语言编辑不同文本即可
Info.plist 本身文件,猜测就是 English 语言的,所有设置 Base 并不会生效
项目内文本本地化
- 新建
Localizable.string
,操作与InfoPlist.string
一致,key-value 形式编辑 - 项目中使用,
NSLocalizedString(key, commom)
,类似的宏定义还有 3 个,具体可以参考NSBundle.h
内的 API
self.testLabel.text = NSLocalizedString(@"test", nil);
- 如果项目比较大,也可以自定义个
string
文件,比如Test.string
self.myLabel.text = NSLocalizedStringFromTable(@"my-test", @"Test", nil);
storyboard 本地化
- 同理,storyboard 也可以设置本地化文件,自带可视化即为 Base,添加的同样已
.string
文件形式 - 较为坑爹的是,如果不是已拉线的方式拖出控件,并用代码的方式本地化的话,必须在每个 storyboard 的本地化文件中修改,且每次修改 storyboard,对应的 string 文件不会修改,还得删掉重新生成,重新生成那么原来的本地化配置又得重新弄,很不舒服
- storyboard 还是建议拉线处理吧,不然太坑了
今日插件名称本地化
- 一开始忽略了项目文件结构,导致插件的本地化不好处理
- 针对插件 TARGET,同理创建
InfoPlist.string
和Localizable.string
即可; - 注意创建时的目录结构即可,每个 TARGET 对应一套本地化资源(第一次尝试时,搞在项目目录导致异常,现在理一理一下子竟然清晰了)