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.stringLocalizable.string 即可;
  • 注意创建时的目录结构即可,每个 TARGET 对应一套本地化资源(第一次尝试时,搞在项目目录导致异常,现在理一理一下子竟然清晰了)