2

我一直在使用 xcode 12 和 swiftui。在我的应用程序中,我有一个带有西班牙语和英语可本地化占位符的 textFiel,我切换到 xcode 13,但它没有显示我的可本地化占位符

在此处输入图像描述

这仅发生在 TextField 中,使用 SecureField 即使使用 Text 也不会发生

这是我的代码

struct ContentView: View {
  @State var email:String = ""
    
    var body: some View {
        VStack () {
           TextField("login5", text: self.$email)
                    .autocapitalization(.none)
                    .padding()
                    .background(RoundedRectangle(cornerRadius: 50).stroke(Color("grayColor")))
        }.padding(.horizontal, 20)
    }
}
                 

可本地化的字符串

"login5" = "Correo eléctronico";
4

3 回答 3

3

SecureFieldios15 中,您可以使用 prompt 参数来获取本地化字符串:

SecureField("purpose", text: $password, prompt: Text("login6"))

或使用标签:

 SecureField(text: $password) {
     Text("login6")
 }

编辑1:

这是我用来显示有效的本地化 TextField 和 SecureField 的测试代码。

import SwiftUI

@main
struct TestApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

struct ContentView: View {
    @State var email = ""
    @State var password = ""
    @State var isVisible = false
    
    var body: some View {
        VStack (spacing: 55) {
            Button(action: { isVisible.toggle() }) {
                Text("Toggle isVisible")
            }
            TextField("login5", text: $email).border(.black)
            if isVisible {
                TextField("login6", text: $password).border(.green)
            } else {
                SecureField("password", text: $password, prompt: Text("login6")).border(.red)
            }
        }.padding(.horizontal, 20)
    }
}

测试Localizable.strings文件。

"login5" = "hola login5";
"login6" = "contraseña";

EDIT2:手动使用 LocalizedStringKey 的替代方法,

TextField(LocalizedStringKey("login5"), text: $email)
于 2021-09-23T02:46:13.373 回答
0

您的主要问题是,就像工作狗已经说过的那样,您需要使用 text: $variable。这意味着您将变量声明为 @State var password = "" 并像这样使用它..

struct ContentView: View {
    @State var password = ""
    ...
    if self.visible{
        TextField("login6", text: $password)
        ....
    } else {
        SecureField("login6", text: $password)
        ....
    }
}

顺便提一句。下次将您的代码发布为代码而不是图片。它更容易帮助您:) 希望我正确理解您的问题,这将是您的解决方案。

于 2021-09-23T06:53:31.447 回答
0

我遇到了完全相同的问题,从 Xcode 12 到 13。突然之间,我的一些(不是全部)文本字段不再显示本地化字符串。我能够通过强制解决问题:

TextField(LocalizedString("usernameLabel"), text: $username)

代替

Textfield("usernameLabel", text: $username)

于 2021-11-16T19:38:52.403 回答