如何更改菜单的标签?

How to change the label of a Menu?

a simple test project at Github 中,我正在尝试显示具有 3 种语言的菜单和允许用户 select 本地化的标志:

struct ContentView: View {
    // ...some Core Data related code skipped...
    
    let labels = [
        "en" : " EN",
        "de" : " DE",
        "ru" : " RU"
    ]
    
    @AppStorage("language") var language:String = "en"

    var body: some View {
        VStack(alignment: .trailing) {

            Menu(language) {
                Button(" EN", action: { language = "en" })
                Button(" DE", action: { language = "de" })
                Button(" RU", action: { language = "ru" })
            }.padding()
            
            List {
                ForEach(topEntities) { top in
                    TopRow(topEntity: top)
                }
            }
        }.environment(\.locale, .init(identifier: language))
    }
}

上面的代码似乎工作正常,但有一个外观问题:Menu 显示 selected 语言一个简单的字符串“en”(或“de”或“ru” ):

作为 Swift 和 SwiftUI 新手我不明白,如何将标签设置为更好的字符串,即 selected 语言和标志,如“EN”。请帮助

您可以从 labels 词典中获取漂亮的字符串。这是工作版本:

Menu(labels[language] ?? "Unknown") {
    Button(" EN", action: { language = "en" })
    Button(" DE", action: { language = "de" })
    Button(" RU", action: { language = "ru" })
}.padding()

我刚刚用 labels[language] ?? "Unknown" 替换了 language