移动开发开发工具【免费下载链接】CoconutKitCoconutKit is a productivity framework for iOS, crafted with love and focusing on ease of use项目地址https://gitcode.com/gh_mirrors/co/CoconutKit点击查看免费下载CoconutKit 是一款注重易用性的 iOS 生产力框架它的动态本地化Dynamic Localization功能让 App 国际化变得异常简单一个[NSBundle setLocalization:]方法调用即可在运行时实时切换整个 App 的语言而在 Interface Builder 里写好几个前缀标签和按钮就能零代码完成翻译。本文结合项目自带 Demo带你完整掌握 CoconutKit 动态本地化的核心用法。为什么需要动态本地化 传统 iOS 本地化有几个痛点用户必须去系统设置里改语言并重启 App才能看到翻译后的界面Nib 文件里的静态文本每个 UILabel / UIButton 都要拖 outlet、写代码刷新翻译遗漏的 key 往往上线后才发现CoconutKit 的动态本地化一次性解决了这三个问题。下图展示了该功能在 Demo 中的实际效果界面中的LS/、ULS/前缀文本会随语言实时替换底部可以直接切换 English / Français。一个方法调用实时切换 App 语言核心 API 位于 NSBundleHLSDynamicLocalization.h 这个分类上[NSBundle setLocalization:fr]; // 切换到法语传 nil 恢复系统默认语言这一行调用背后有几重福利能力说明立即生效通过 method swizzling 透明拦截localizedStringForKey:value:table:、pathForResource:ofType:、URLForResource:withExtension:等 APINSLocalizedString宏、图片资源查找全部自动跟随自动持久化选择保存在 NSUserDefaults 中下次启动直接沿用该语言广播通知切换后发出HLSCurrentLocalizationDidChangeNotification方便其他模块监听语言名友好化HLSLanguageForLocalization(fr)返回Français直接用于构建语言选择列表Demo 应用里的语言切换菜单就是最典型的用法枚举主 Bundle 支持的语言点击即用见 CoconutKit_demoApplication.mfor (NSString *localization in [NSBundle mainBundle].localizations) { // HLSLanguageForLocalization(fr) → Français [NSBundle setLocalization:localization]; }让所有页面自动跟随-localize方法把视图控制器继承自HLSViewController将所有读取本地化资源的代码集中写进-localize方法见 HLSViewController.h。语言切换时CoconutKit 会自动重新调用该方法刷新界面你不需要手动遍历视图控制器。一个精简示例DynamicLocalizationDemoViewController.m- (void)localize { [super localize]; self.title NSLocalizedString(Dynamic localization, nil); // 本地化图片注意用 pathForResource imageWithContentsOfFile:原因见下文 NSString *imagePath [[NSBundle mainBundle] pathForResource:img_localized ofType:png]; self.imageView.image [UIImage imageWithContentsOfFile:imagePath]; }IB 内零代码翻译LS/、ULS/、LLS/、CLS/ 四个前缀这是动态本地化最惊艳的部分。在 Interface Builder 中直接把以下形式的文本写进 UILabel 的 Text 或 UIButton 的 Title实现见 UILabelHLSDynamicLocalization.h前缀写法效果LS/key替换为 key 对应的本地化字符串ULS/key同上但全部大写LLS/key同上但全部小写CLS/key同上但首字母大写例如在 Xib 里写LS/String in Localizable.strings运行时就会显示 Localizable.strings 中该 key 的译文法语环境下则是 fr.lproj 版本 的内容。完全不需要拖 outlet也不需要一行翻译代码。法语切换动画效果如下图所示用 locTable / locBundle 属性切换字符串表默认 key 在主 Bundle 的Localizable.strings中查找。如果需要别的表或别的 Bundle给视图添加两个用户自定义 Runtime 属性即可无需编码locTable字符串表名不含 .strings 扩展名默认LocalizablelocBundleBundle 名不含 .bundle 扩展名默认主 Bundle更妙的是支持继承把属性设在一个父视图上其内部所有标签、按钮自动沿用。这意味着整屏翻译只需要在容器视图上设置一次属性。Demo 的 Xib 里就有现成示例DynamicLocalizationDemoViewController.xib 中灰色容器视图统一下发了locTable InnerTable、locBundle InnerBundle。 小提醒由于 key 写在 Nib 里Xcode 的genstrings无法自动提取导出翻译字典时需手动整理这些 key。图片动态本地化一个不能忘的坑[UIImage imageNamed:]内部有缓存且没有公开的清除 API直接用它加载本地化图片会在语言切换后纹丝不动。官方推荐的做法是先用被拦截过的路径 API 取到文件再按路径加载NSString *path [[NSBundle mainBundle] pathForResource:img_localized ofType:png]; self.imageView.image [UIImage imageWithContentsOfFile:path];下面是 Demo 中随语言切换的本地化图片资源效果——英语环境显示美国国旗法语环境自动换成法国国旗黄色高亮揪出漏翻的文案 ️漏翻译是本地化项目的常见事故。CoconutKit 提供了一键体检开关[UILabel setMissingLocalizationsVisible:YES];打开后凡是当前语言下找不到译文的标签都会变成醒目的黄色背景配合 Demo 里的 Switch 开关可以随时开关DynamicLocalizationDemoViewController.m。如果更习惯看控制台日志也可以打开系统开关NSShowNonLocalizedStrings缺失的 key 会被逐条打印出来。在项目中落地5 步上手清单 引入 CoconutKit 框架视图控制器统一继承HLSViewController本地化代码集中写在-localize方法中Nib 中的静态文本改用LS/、ULS/等前缀不再拖 outlet为每个语言创建.lproj/Localizable.strings可参考 Demo/Resources/en.lproj 的结构在设置页提供语言列表调用[NSBundle setLocalization:]完成切换总结CoconutKit 的动态本地化把 iOS 国际化的三件事做到了极致简洁语言切换一行调用、IB 内前缀即翻译、漏翻一键高亮。配合-localize方法自动刷新和locTable/locBundle属性继承从 Demo 到生产项目都能快速落地是值得在多语言 App 中优先尝试的实用功能。赞分享移动开发开发工具【免费下载链接】CoconutKitCoconutKit is a productivity framework for iOS, crafted with love and focusing on ease of use项目地址https://gitcode.com/gh_mirrors/co/CoconutKit点击查看免费下载相关推荐如何快速实现RetroArch多语言切换完整本地化指南如何快速实现RetroArch多语言切换完整本地化指南 RetroArch作为一款跨平台的libretro API前端支持全球用户通过多语言界面获得更好的使游戏开发跨平台音视频ReactPage国际化深入动态语言切换与本地化内容ReactPage国际化深入动态语言切换与本地化内容 在全球化内容创作的时代多语言支持已成为现代编辑器的核心需求。ReactPage作为基于React和Ty前端UI组件OpenCV DNN 跑通 YOLO 目标检测从模型加载到实时输出的最短路径OpenCV DNN 跑通 YOLO 目标检测从模型加载到实时输出的最短路径 在普通笔记本上跑通实时目标检测不需要 GPU也不需要训练框架。OpenCV计算机视觉图像处理深度学习机器学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考