You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI如何修改Menu组件的显示标签为带国旗的完整语言名称

解决方案

你已经提前定义了语言简码对应友好显示文本的labels字典,只需要将Menu构造时传入的显示标签从language替换为字典取值即可,可选值可以设置兜底的显示内容避免异常。

修改后的核心代码如下:

// 仅需修改Menu初始化的第一个参数即可
Menu(labels[language] ?? "未知语言") {
    Button("🇺🇸 EN", action: { language = "en" })
    Button("🇩🇪 DE", action: { language = "de" })
    Button("🇷🇺 RU", action: { language = "ru" })
}.padding()

代码优化建议

如果要避免重复编写按钮逻辑,方便后续新增语言,可以直接遍历labels字典生成Menu内的按钮,后续新增语言仅需要修改labels字典即可,无需改动其他代码:

struct ContentView: View {
    // ...部分Core Data相关代码已省略...
    
    let labels = [
        "en" : "🇺🇸 EN",
        "de" : "🇩🇪 DE",
        "ru" : "🇷🇺 RU"
    ]
    
    @AppStorage("language") var language:String = "en"

    var body: some View {
        VStack(alignment: .trailing) {
            Menu(labels[language] ?? "未知语言") {
                // 遍历字典生成按钮,sorted保证显示顺序固定
                ForEach(labels.sorted(by: <), id: \.key) { key, value in
                    Button(value, action: { language = key })
                }
            }.padding()
            
            List {
                ForEach(topEntities) { top in
                    TopRow(topEntity: top)
                }
            }
        }.environment(\.locale, .init(identifier: language))
    }
}

内容的提问来源于stack exchange,提问作者Alexander Farber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 17:45:09