公司 app 进行本地化,发现 pod 本地化与直接在 project 本地化还是有差异的,这里以英文和简体中文本地化作为例子。文章最后提供了 pod 本地化的工具类。

一、添加多语言文字

1、创建多语言文件夹

多语言文件夹采用语言的编码和 .lproj 作为文件夹名称。例如英文的为 en.lproj 。语言的编码可以从苹果官网查询到。当然也可以自定义编码,这里不做讨论,因为读取本地文本的方式只和文件夹名称有关,只要配置正确就可以。

en.lproj 和 zh-Hant.lproj 的文件夹效果如下:

2、创建 strings 文件

可以使用系统提供的 Strings file 创建,也可以使用空文件创建

将语言文件放到相应的语言编码文件夹下。效果如下:

3、添加语言键值对

把 PodTest.strings 通过 ASCII property list 的方式打开.然后添加语言键值对如下图:

注意:尽量不要以source  code的方式编译,容易出现编译错误,如果出现错误可以用这个命令检查下
/usr/bin/plutil -lint PodTest/Resource/en.lproj/PodTest.strings

4、podspec路径配置

  s.resource_bundles = {'SLTLocalizeTest' => ['SLTLocalizeTest/LocalizedStrings/*.lproj/*']}

注意:路径要设置到lproj级别,这样 xcode 对多语言文件的显示会geng’j更加友好,同时编译进 app 后的多语言文件将是二进制格式。如果这样配置 LocalizedStrings/* ,打包后的 strings 文件将是明文形式,并且 lproj 文件只是作为普通文件显示到 xcode 中。

5、本地语言读取代码示例


- (NSString *)bundleString:(NSString *)key{NSBundle *bundle = [self.class bundleInFramework:@"PodTest.framework" bundleName:@"PodTestLong.bundle"];NSString *testString = NSLocalizedStringFromTableInBundle(key, @"PodInterLong", bundle, nil);return testString;
}/***  读取framework中的bundle**  @param framework  bundle所在的framewok的名称*  @param bundleName bundle的名称**  @return 如果存在则返回bundle,不存在则返回nil*/
+ (NSBundle *)bundleInFramework:(NSString *)framework bundleName:(NSString *)bundleName {if ([framework length] == 0 || [bundleName length] == 0) {return nil;}NSString *tempFramework = [framework copy];NSString *frameExtension = @".framework";if (![framework hasSuffix:frameExtension]) {tempFramework = [framework stringByAppendingString:frameExtension];}NSString *tempBundle = [bundleName copy];NSString *bundleExtension = @".bundle";if (![bundleName hasSuffix:bundleExtension]) {tempBundle = [bundleName stringByAppendingString:bundleExtension];}NSString*path =  [[[NSBundle mainBundle] privateFrameworksPath] stringByAppendingPathComponent:framework];NSBundle *bundle = [NSBundle bundleWithPath:[path stringByAppendingPathComponent:tempBundle]];return bundle;
}

二、添加多语言图片

1、文件夹的创建方式与文本的相同

直接手动创建添加后缀或者点击 xcode 的 localize 按钮创建即可

2、添加多语言图片

将名称相同的图片放到相应的编码文件下即可

3、路径配置

s.resource_bundles = {'SLTLocalizeTest' => ['SLTLocalizeTest/LocalizedImages/*.lproj/*.png','SLTLocalizeTest/LocalizedStrings/*.lproj/*']}

注意:建议配置到lrpoj级别

4、示例代码

+ (UIImage *)localizedImage:(NSString *)imageName inBundle:(NSString *)bundleName {if (imageName.length == 0) return nil;if ([imageName hasSuffix:@"/"]) return nil;NSString *res = imageName.stringByDeletingPathExtension;NSString *ext = imageName.pathExtension;NSString *path = nil;CGFloat scale = 1;NSArray *exts = ext.length > 0 ? @[ext] : @[@"", @"png", @"jpg"];NSArray *scales = _ONENSBundlePreferredScales();NSBundle *tmp = ONEBundleWithName(bundleName);NSString *language = [ONEUserLanguageManager currentLanguage];NSString *fileNamePrefix = DILanguageCodeToISO639(language);if (![ONEValidJudge isValidString:fileNamePrefix]) {DDLogError(@"语言编码转化错误:%@",fileNamePrefix);return nil;}NSString *bundlePath = [tmp pathForResource:fileNamePrefix ofType:@"lproj"];NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];for (int s = 0; s < scales.count; s++) {scale = ((NSNumber *)scales[s]).floatValue;NSString *scaledName = _ONENSStringByAppendingNameScale(res, scale);for (NSString *e in exts) {path = [bundle pathForResource:scaledName ofType:e];if (path) break;}if (path) break;}if (path.length == 0) return nil;NSData *data = [NSData dataWithContentsOfFile:path];if (data.length == 0) return nil;return [[UIImage alloc] initWithData:data scale:scale];}

三、pod 本地化工具类

由于该需求很具有通用性,因此将该功能封装成了一个 cocoapod 工具。仓库地址如下:https://github.com/LiuShulong/SLTLocalizeKit

如何把Pod本地化(Localize)相关推荐

  1. 「UG/NX」BlockUI 枚举Enum

    目录 控件说明 界面效果 公有属性 对话框标题 DialogLabel(仅创建) 控件灰显 Enable 分组 Group(仅创建) 控件显隐 Show 控件标题 Label 国籍文本 AllowIn ...

  2. 「UG/NX」BlockUI 字符串String

    目录 控件说明 界面效果 公有属性 对话框标题 DialogLabel(仅创建) 控件灰显 Enable 分组 Group(仅创建) 控件显隐 Show 控件标题 Label 国籍文本 AllowIn ...

  3. 「UG/NX」BlockUI 标签/位图Label

    目录 控件说明 界面效果 公有属性 对话框标题 DialogLabel(仅创建) 控件灰显 Enable 分组 Group(仅创建) 控件显隐 Show 控件标题 Label 国籍文本 AllowIn ...

  4. 「UG/NX」Block UI 对象颜色拾取器ObjectColorPicker

    目录 控件说明 界面效果 公有属性 对话框标题 DialogLabel(仅创建) 控件灰显 Enable 分组 Group(仅创建) 控件显隐 Show 控件标题 Label 国籍文本 AllowIn ...

  5. 「UG/NX」Block UI RGB 颜色拾取器RGBColorPicker

    目录 控件说明 界面效果 公有属性![在这里插入图片描述](https://img-blog.csdnimg.cn/447b255a88c545339d87ae5bcc5b610d.png) 对话框标 ...

  6. 「UG/NX」BlockUI 操作按钮Button

    目录 控件说明 界面效果 公有属性 对话框标题 DialogLabel(仅创建) 控件灰显 Enable 分组 Group(仅创建) 控件显隐 Show 控件标题 Label 国籍文本 AllowIn ...

  7. 「UG/NX」Block UI 微定位Microposition

    目录 控件说明 界面效果 公有属性 对话框标题 DialogLabel(仅创建) 控件灰显 Enable 分组 Group(仅创建) 控件显隐 Show 控件标题 Label 国籍文本 AllowIn ...

  8. swift项目嵌入flutter的module混合开发(framework模式:适合多人协作开发,一个负责混合开发)

    和之前一样,这个模块也是对于本地我们开发好的代码,需要到一起开发iOS的同事需要拉代码,调试的时候.这种静态包的方式就会好很多.不用在他的电脑上也搭建flutter环境,以及创建flutter项目的拉 ...

  9. 计算机网络笔记(二) 应用层 Chapter2-ApplicationLayer

    文章目录 一.Network Application Architectures 1.1 client-server architecture: 1.2 P2P architecture: 1.3 H ...

最新文章

  1. NuGet学习笔记(3) 搭建属于自己的NuGet服务器
  2. [Linux] ubuntu 格式化u盘
  3. C#类方法中使用数组参数params关键字的作用
  4. java ip加密如何访问_java代码中如何实现http访问
  5. 在Payara Server和GlassFish中配置密码
  6. 【CodeForces - 1131F 】Asya And Kittens(并查集,思维)
  7. CentOS 7 odoo12 部署
  8. SpringBoot项目如何进行打包部署
  9. 2021安装VSCode教程并创建第一个项目,同时设置成中文语言(超详细)
  10. Linux系统基本操作及命令详解
  11. 图表控件AnyChart使用JavaScript创建维恩图
  12. 603. 连续空余座位
  13. 全能修图工具Pixelmator Pro for Mac
  14. NSSCTF部分复现
  15. 仿微信朋友圈拍照上传
  16. 中国艺术孙溟㠭书法《觉》
  17. 文物3D模型互动展示 | 足不出户,即可领略九龙壁的美轮美奂
  18. ES6 标签模板(Tagged templates)
  19. ZOJ 4062 Plants vs. Zombies(二分)
  20. python判断两数互质_hide handkerchief(判断两数是否互质)

热门文章

  1. 【MySQL--03】表的操作
  2. Typora中如何使用数学公式、数学符号
  3. 电脑上的软件卸载不了怎么办
  4. 联想TD350服务器主板型号,【新品】塔式机身 联想ThinkServer TD350
  5. csgo国服一直连不上服务器,csgo国服显示连接服务器发生错误 | 手游网游页游攻略大全...
  6. python爬虫实战-网易BUFF CSGO饰品
  7. GITHUB无法打开与下载失败解决方法总结
  8. java编译(打包)完成,导致Excel文件损坏的问题
  9. 中国老百姓一生要交多少税?
  10. 大数据发展前景及就业方向【大数据专业讲座】