如何自动排除SwiftUI PreviewProvider中的字符串被Xcode本地化导出?
解决SwiftUI预览字符串被本地化导出的问题
方法1:自定义预览专用Text视图
创建仅在Debug环境下生效的PreviewText,内部直接使用Text(verbatim:)规避本地化扫描:
#if DEBUG struct PreviewText: View { let content: String init(_ content: String) { self.content = content } var body: some View { Text(verbatim: content) } } #endif
使用时直接替换预览里的Text:
struct ContentView_Previews: PreviewProvider { static var previews: some View { PreviewText("仅预览用的文本") } }
方法2:全局预览字符串包装函数
定义全局函数,仅在Debug环境下返回原始字符串,避免被本地化工具捕获:
#if DEBUG func previewStr(_ str: String) -> String { str } #endif
在预览中调用:
struct ContentView_Previews: PreviewProvider { static var previews: some View { Text(previewStr("预览专属文本")) } }
方法3:排除预览文件的本地化
将所有预览代码(含预览用字符串)单独放在一个文件中,然后在Xcode中设置该文件不参与本地化:
- 选中目标文件,打开右侧File Inspector
- 在Localization区域,取消勾选所有本地化语言,或点击
Localize...后选择"Remove Localization"
Xcode导出本地化时会自动忽略该文件内的所有字符串。
为什么#if DEBUG包裹PreviewProvider无效?
Xcode的Export Localizations工具默认会扫描所有编译目标的代码(包括Debug配置),单纯包裹PreviewProvider结构体无法阻止工具扫描内部的字符串字面量。
内容的提问来源于stack exchange,提问作者alexkaessner
相关产品推荐
相关产品推荐

