显示本地化字符串

问题描述 投票:0回答:1

我正在 SwiftUI 中进行本地化工作。我创建了包含几个条目的本地化文件,如下所示:

我创建了一个 LocalizedError ,如下所示:

enum NewDriverLicenseFormError: LocalizedError, Identifiable {
    
    var id: UUID {
        UUID()
    }
    
    case firstName
   
    var errorDescription: String? {
        switch self {
        case .firstName:
            return NSLocalizedString("First name cannot be empty.", comment: "")
    }
}

我将预览区域设置更改为使用西班牙语:

#Preview("NewDriverLicenseScreen Spanish") {
    NewDriverLicenseScreen()
        .environment(\.locale, Locale(identifier: "es"))
}

当我运行 NewDriverLicenseScreen(视图)时,名字以西班牙语显示,但 ValidationSummaryView 中显示的错误消息不以西班牙语显示。

struct NewDriverLicenseScreen: View {
    
    @State private var newDriverLicenseForm = NewDriverLicenseForm()
    
    var body: some View {
        Form {
            TextField("First name", text: $newDriverLicenseForm.firstName)
            Button("Submit") {
                if newDriverLicenseForm.validate() {
                    
                }
            }
            
            ValidationSummaryView(errorMessages: newDriverLicenseForm.errorMessages)
        }
    }
}

struct ValidationSummaryView: View {
    
    let errorMessages: [NewDriverLicenseFormError]
    
    var body: some View {
        ForEach(errorMessages) { errorMessage in
            Text(errorMessage.localizedDescription)
        }
    }
}

任何想法!

ios swiftui localization
1个回答
0
投票

NSLocalizedString
不知道 SwiftUI 的
EnvironmentValues
。它仅在设备的区域设置上运行。

您可以向错误类型添加

LocalizedStringKey
属性。将其赋予
Text
将正确定位字符串,因为
Text
知道
EnvironmentValues

var localisationKey: LocalizedStringKey {
    switch self {
    case .firstName:
        return "First name cannot be empty."
}

这将自动在字符串目录中生成一个条目。

用途:

ForEach(errorMessages) { errorMessage in
    Text(errorMessage.localisationKey)
}
© www.soinside.com 2019 - 2024. All rights reserved.