如何本地化UITextView中的菜单选项(如Copy、Look Up等)?
如何本地化UITextView中的菜单选项(如Copy、Look Up等)?
嘿,这个问题我之前也踩过坑,刚好有靠谱的解决方案可以分享给你!
核心思路:让系统帮你搞定原生菜单的本地化
其实iOS系统本身就自带了这些系统级菜单(Copy、Look Up、Learn...)的多语言支持,根本不需要你手动去自定义UIAction覆盖,反而自己写的话容易搞砸,还可能碰到私有API的问题。
要让系统自动本地化这些菜单,只要做好两步配置:
- 打开项目的
Project Settings→Info标签页,在Localizations列表里添加你需要支持的语言(比如简体中文、法语等)。 - 确保你的
Info.plist中包含CFBundleLocalizations键,并且把对应的语言代码(比如zh-Hans、fr)加进去。
完成这两步后,当用户的系统语言切换到对应语言时,UITextView弹出的上下文菜单会自动变成用户的母语,完全不用你写额外的代码。
关于你之前的尝试:别用自定义UIAction覆盖系统原生动作
你之前为了本地化Copy而写自定义UIAction的做法其实没必要,系统的Copy动作本身已经支持多语言,只要项目配置正确就会自动显示对应语言的标题。而Look Up这类动作,绝对不要去碰_define这种私有API——不仅会导致App Store审核被拒,还可能在iOS版本更新时直接崩溃,得不偿失。
如果要加自定义菜单选项,这么处理本地化
要是你需要在菜单里添加自己的自定义动作,那可以用NSLocalizedString来实现本地化:
// 创建自定义动作时用本地化字符串 let customShareAction = UIAction(title: NSLocalizedString("Share_Text", comment: "分享选中的文本")) { _ in // 执行分享逻辑 } textView.addAction(customShareAction, for: .menuActionTriggered)
然后在对应语言的.strings文件里添加翻译,比如zh-Hans.lproj/Localizable.strings中:
"Share_Text" = "分享文本";
这样既保证了自定义菜单的本地化,又不会破坏系统原生菜单的功能。
备注:内容来源于stack exchange,提问作者Seigetsu
相关产品推荐
相关产品推荐

