String Catalog失效:仅提取Text初始化器字符串,开启SWIFT_EMIT_LOC_STRINGS仍无效
String Catalog无法提取自定义视图参数中字面量字符串的解决方法
问题核心
开启SWIFT_EMIT_LOC_STRINGS后,SwiftUI的String Catalog仍只提取Text初始化器中的字符串,自定义视图的参数字面量(如示例中的title、subtitle)未被纳入本地化文件,本质是编译器无法识别这些普通字符串需要本地化。
解决办法
手动标记本地化字符串
将需要本地化的字面量用String(localized:)包装,明确告诉编译器该字符串需要被提取:IntroView( title: String(localized: "titleTest"), subtitle: String(localized: "subtitleTest"), actionTitle: String(localized: "ActionTest") ) { print("testAction") }修改自定义视图参数类型
如果自定义视图的这些参数是用于UI展示的文本,直接将参数类型从String改为LocalizedStringKey。传入字面量时,编译器会自动识别为需要本地化的内容,无需额外包装:
自定义视图定义示例:struct IntroView: View { let title: LocalizedStringKey let subtitle: LocalizedStringKey let actionTitle: LocalizedStringKey let action: () -> Void var body: some View { VStack { Text(title) Text(subtitle) Button(actionTitle, action: action) } } }原调用代码无需修改,传入的字面量会自动被提取到String Catalog。
验证全局配置
确认SWIFT_EMIT_LOC_STRINGS在所有目标的Build Settings中都设为YES,覆盖Debug、Release等所有配置项,避免因配置遗漏导致的提取失败。
内容的提问来源于stack exchange,提问作者Vincenzo Flaminio
相关产品推荐
相关产品推荐

