列出所有区域设置标识符和相应的区域文本 Swiftui

Eti*_*nne 5 locale region swift swiftui

我想生成一个所有区域设置标识符的列表,供用户选择作为默认值。类似于在标准设置中选择区域。

因此,我想生成一个列表,其中包含例如“澳大利亚”、“奥地利”、“阿塞拜疆”、...、“也门”、“赞比亚”、“津巴布韦”。如果用户选择“澳大利亚”,我想返回en_AU.

所以需要确定下Locale可以使用的属性以及如何遍历它。

目前,只是想看看我是否可以返回文本,例如“澳大利亚”:

Text(Locale.localizedString(Locale.init(identifier: Locale.availableIdentifiers[0].description)))
Run Code Online (Sandbox Code Playgroud)

但是返回错误:

Closure containing control flow statement cannot be used with function builder 'ViewBuilder'
Run Code Online (Sandbox Code Playgroud)

谢谢

Moj*_*ini 7

看起来您正在寻找每个标识符的名称。你可以从NSLocale类似的地方得到这些:

Locale.availableIdentifiers.map {
    (id: $0, name: (NSLocale.current as NSLocale).displayName(forKey: .languageCode, value: $0) ?? "-")
}
Run Code Online (Sandbox Code Playgroud)

所以你可以随心所欲地升起它们。例如,将它们显示在列表中:

struct ContentView: View {
    let localeSheet: [(id: String, name: String)] = {
        Locale.availableIdentifiers.map {
            (id: $0, name: (NSLocale.current as NSLocale).displayName(forKey: .languageCode, value: $0) ?? "-")
        }.sorted { $0.name < $1.name }
    }()

    var body: some View {
        List(localeSheet, id: \.id) {
            Text($0.name)
            Spacer()
            Text($0.id)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)