iOS 需求 多语言(国际化)App开发 源码

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

前言

某些公司希望App支持的多语言文件弄到线上去,通过下载多语言文件的方式或者通过接口请求json数据回来,进行多语言显示的方式,解决多语言的问题. 经过自己在网上查阅过很多资料跟我自己想的都是一致的,无论是下载文件读取,还是请求接口,都是返回json的形式,然后我去github搜索相关的SDK,也是使用json的方式来实现多语言数据的使用.

不能解决的问题

另外.其实多语言弄到线上去,最大的一个帮助就是,更新内容的时候,直接可以热更新,不需要重新提交审核,其实并不能完全很好的解决全部问题,

1.主要是app有新的页面(功能)开发,就需要有新增的字段,也是需要重新提交审核.(只能解决原有的字段内容更新)

2.如果从线上下载多语言的字段,为了防止下载失败,通常都会在项目放入一份多语言的json文件进行备份.而且要跟线上的保持一致.如果是这样的话,线上的那份就多此一举了.本地本身有一份跟线上的一模一样,就没有必要从网上拿,如果本地不备份存在安全隐患,万一接口访问失败,整个app有很大的影响

能解决的问题

1.如果字段的内容是由不同不部门或者受到区域限制的问题,可能放到线上,其他人修改比较方便

2.如果发现内容有问题,需要及时更改及时使用,需要等待审核这段时间.

多语言代码逻辑图

github上有一个DialectSDK,是用于多语言的开发,通过下载json文件,进行保存,可以加载本地的多语言文件保存到缓存中使用.从github下载是有问题的,上面源码的链接是已经修改好的

该第三方的思路是对的,符合公司的需求,但是该第三方下载下来,语法编译不通过,修改之后才能够进行使用,多语言文件的使用逻辑有问题,需求进行修改才能正常使用,我对该SDK已经修改好了

使用

从缓存中加载数据

Dialect 每次启动通过load方法读取

判断某个语言是否有数据

objectivec 复制代码
[Dialect localizationDictionaryForTable:@"en"]

加载本地文件并保存

objectivec 复制代码
NSData *enData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"en" ofType:@"json"]];
NSDictionary *enJson = [NSJSONSerialization JSONObjectWithData:enData options:NSJSONReadingMutableContainers error:nil];
[Dialect setMainLocalizationDictionary:enJson table:@"en" update:NO storeOnDisk:YES];

读取字段数据

objectivec 复制代码
[Dialect stringFor:@"message" table:@"zh"];

更新数据并保存

objectivec 复制代码
NSData *enData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"updateEn" ofType:@"json"]];
NSDictionary *enJson = [NSJSONSerialization JSONObjectWithData:enData options:NSJSONReadingMutableContainers error:nil];
[Dialect setMainLocalizationDictionary:enJson table:@"en" update:YES storeOnDisk:YES];
相关推荐
酷虎软件4 小时前
分享链接+视频音频文案提取 API 接口文档
ide·macos·xcode
Hyyy9 小时前
为什么 macOS 应用一换 Bundle ID,之前授予的权限就全失效了?
macos·electron
CocoaKier9 小时前
Facebook登录的这条红色警告,我终于搞明白了,真是反人类设计!
ios·facebook
p似笑非笑10 小时前
实战验证——把 SDK 塞进一个 macOS 原生 Agent 应用
macos
humors22113 小时前
【转帖】安全企业发布iOS漏洞攻击风险检测工具
安全·ios·手机·苹果
p似笑非笑14 小时前
在Mac上完美配置VSCode的C/C++开发环境(GCC/G++详细教程)
c语言·vscode·macos
沐风___16 小时前
iOS 崩溃收集实战:从「只看到次数、看不到原因」到 Sentry 完整集成
ios·sentry
listening77717 小时前
HarmonyOS 6.1 跨端实战:用ArkUI-X把电商App同时跑在Android/iOS上
android·ios·harmonyos
韦胖漫谈IT18 小时前
Apple M3 Max 与 Apple M5 Max 对比:本地算力的新旧王者之争
网络·人工智能·macos·transformer
Tyler_118 小时前
iOS PlayWright mcp server
前端·ios·ai编程