如何解决我可以对UIKit视图使用LocalizedStringKey吗?
我正在使用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
不会公开用于初始化它的字符串...还有其他好的方法吗?
解决方法
要使此代码正常工作,您仍然需要一个名为.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。