如何本地化Storyboard中的AttributedString?Xcode仅支持纯文本本地化
Attributed类型UILabel本地化内容缺失的解决办法
问题根源
Xcode自带的Storyboard自动本地化工具只会抓取**纯文本(Plain Text)**控件的内容生成strings条目,带格式的Attributed Text因为包含字体、颜色等额外属性,不会被自动识别提取,所以才会出现你遇到的情况。
具体解决步骤
手动添加本地化条目
- 选中Storyboard里的Attributed UILabel,打开右侧「身份检查器」,找到「文档」区域的「Object ID」并复制(类似
Xyz-12-abC这样的字符串) - 打开对应语言的strings文件(比如
en.lproj/Main.strings),手动写入:
把"Xyz-12-abC.text" = "要本地化的富文本内容";Xyz-12-abC换成你复制的Object ID,等号右侧填对应语言的文本即可。
- 选中Storyboard里的Attributed UILabel,打开右侧「身份检查器」,找到「文档」区域的「Object ID」并复制(类似
确认本地化配置正确
选中你的Storyboard文件,在右侧「文件检查器」的「本地化」区域,确保对应语言的本地化类型是「Localizable Strings」,而不是「Interface Builder Cocoa Touch Storyboard」——如果是后者,切换成Localizable Strings后,Xcode会重新生成strings文件,你再补全Attributed控件的条目就行。验证效果
修改不同语言strings文件里对应Attributed控件的文本,运行App切换系统语言,就能看到文本内容被替换,原有的字体、颜色格式会保留。
额外说明
如果需要给不同语言设置不同的富文本格式(比如英文用粗体,西语用斜体),那strings文件就满足不了了,得改成代码实现:
- 去掉Storyboard里该控件的本地化配置
- 在代码里根据当前系统语言,加载对应语言的Attributed字符串(可以用
NSAttributedString的本地化文件,或者直接在代码里拼接格式和文本)
内容的提问来源于stack exchange,提问作者Yisus
相关产品推荐
相关产品推荐

