在Swift本地化过程中,发现Localizable不显示货币本地化名称不能使用。
在代码中使用Text(String(localized:))显示对应的中文本地化内容:
Text(String(localized:"\(updateER.updateERInfo?.records[index].foreignCName ?? "")"))
但实际显示过程中,发现并不能直接展示本地化内容信息。
经排查发现字符串插值(”\(value)”)不能直接处理插值,原因为本地化通常需要在Localizable.strings文件中有对应的键值对,且键应为静态字符串,因此,动态插值会导致本地化失效。
解决方案为将String转换为静态的本地化键类型,通过LocalizedStringKey来处理,这种方式运行直接用静态的键名匹配。
代码:
let foreignCName = updateER.updateERInfo?.records[index].foreignCName ?? ""
let localizedKey = LocalizedStringKey(foreignCName)
Text(localizedKey)
特别注意的是,用Text()直接展示LocalizedStringKey转换的值。
Text(localizedKey) // 正确用法
我在这个地方错误的使用错误用法,导致一时半会没解决。
Text(String(localized: localizedKey)) // 错误用法
最后,问题得到解决,正常本地化显示插值。