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
相关产品推荐
相关产品推荐

