微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以对UIKit视图使用LocalizedStringKey吗?

如何解决我可以对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类型更改为placeholderStringLibrary

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。