我正在使用UITextField
协议将SwiftUI
包装在UIViewRepresentable
视图中;我想将LocalizedStringKey
传递给基础UITextField
的{{1}}。像这样:
用于避免使用硬编码字符串并轻松查找代码中所有可本地化的字符串的扩展:
placeholder
自定义文本字段:
extension LocalizedStringKey {
let search: LocalizedStringKey = "search"
}
我想要的用法:
struct SuperTextField: UIViewRepresentable {
let placeholder: LocalizedStringKey
// all UIViewRepresentable methods
func updateUIView(_ uiView: UITextField, context: Context) {
uiView.placeholder = placeholder // of course this doesn't compile as textField placeholder is a simple `String`
}
}
我不认为这是可能的,因为SuperTextField(placeholder: .search) // use auto infer
不会公开用于初始化它的字符串...还有其他好的方法吗?
答案 0 :(得分:0)
要使此代码正常工作,您仍然需要一个名为.strings
的{{1}}文件Localizable.strings
,并使用您的翻译进行填充。
Localized
如果您已经拥有自己的import SwiftUI
struct StringEnum: View {
//@State var userText: String = "" //Remove comment for use with a TextField
var body: some View {
Text(StringLibrary.search.localize())
//TextField(StringLibrary.search.localize(), text: $userText)
}
}
enum StringLibrary: String {
case search = "search"
}
extension StringLibrary{
func localize() -> String {
return NSLocalizedString(self.rawValue, comment: "default")
}
}
struct StringEnum_Previews: PreviewProvider {
static var previews: some View {
StringEnum()
}
}
,请使用包含.strings
的{{1}}构造函数。
您可以在需要NSLocalizedString
的任何地方使用tableName
要在StringLibrary.search.localize()
中使用它,请将String
中的SuperTextField
类型更改为placeholder
和StringLibrary