如何将选择器本地化为另一种语言?

how to localize a picker to another language?

@State var selectedSpace : FreeSpace = .Big_Bag

     Picker("", selection: $selectedSpace) {
                            ForEach(FreeSpace.allCases) { FreeSpace in
                                Text(FreeSpace.rawValue.capitalized)
                            }
                        }.environment(\.locale, Locale.init(identifier: "az-Arab"))
                          .foregroundColor(Color("Color"))
                          .padding(.trailing)

知道 pickerValues

enum FreeSpace: String, CaseIterable, Identifiable {
        case Big_Bag, Small_Bag
        var id: Self { self }
    }

我正在尝试将选择器中的内容转换为阿拉伯语,但找不到解决方案,它始终以英语显示。

来自苹果文档:

If you intialize a text view with a variable value, the view uses the init(:) initializer, which doesn’t localize the string. However, you can request localization by creating a LocalizedStringKey instance first, which triggers the init(:tableName:bundle:comment:) initializer instead:

// Don't localize a string variable...
Text(writingImplement)

// ...unless you explicitly convert it to a localized string key.
Text(LocalizedStringKey(writingImplement))

这意味着您必须使用:

Text(LocalizedStringKey(FreeSpace.rawValue.capitalized))

我认为您误解了 iOS 本地化的概念。在您的应用程序中,您需要提供可本地化的字符串文件(通常命名为 Localizable.strings),其中包含您支持的语言的本地化值。

所以基本上在您的项目设置中,您需要启用所需的语言(屏幕截图上的英语和阿拉伯语)。

然后您创建 Localizable.strings 文件并将其添加为您的应用程序的资源。然后通过单击文件检查器中的本地化使其可本地化。

这将让您选择要为当前文件使用的语言。使其可本地化后,您可以勾选要使用的语言,然后可以在 Project Navigator 中切换它们。

从现在开始,您将把本地化文本放入其适当的 Localizable 文件中,并使用其密钥访问它。

那么如果你使用 Text(String(localized: "key").uppercased()) 你应该没问题。