ios - 我可以将 LocalizedStringKey 用于 UIKit 视图吗?
问题描述
我正在使用协议将 a 包装UITextField
在SwiftUI
视图中;UIViewRepresentable
我想将 a 传递LocalizedStringKey
给底层UITextField
的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
我认为目前这是不可能的,因为LocalizedStringKey
没有公开用于初始化它的字符串......还有其他好的方法吗?
解决方案
要使此代码正常工作,您仍然需要一个.strings
名为的文件,该文件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
使用NSLocalizedString
包含tableName
.
您可以StringLibrary.search.localize()
在任何需要String
要在您SuperTextField
将placeholder
类型更改为StringLibrary
和.localize()
范围内使用它SuperTextField
推荐阅读
- reactjs - babylonjs 反应打字稿问题/建议
- hsqldb - Hsqldb 2.5.0 系统版本
- spring-boot - @JMSListner 中的 Brave/Sleuth Traceid
- css - 导航链接和主页文本的简单 CSS 问题
- javascript - JS:如何在没有 NPM 的情况下使用库?
- python - 使用python中的csv文件从目录中删除文件
- node.js - node.js selenium chrome headless 一个实例启动多个“chrome”进程
- go - 添加到 CookieJar 会导致 cookie 数据被清除
- svelte - 如何在 Sapper 中加载全局(PostCSS)样式?
- sql - 更改sql系统端口后自动批处理文件备份不起作用