首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Locale.current在设备上报告错误语言

Locale.current在设备上报告错误语言
EN

Stack Overflow用户
提问于 2018-01-07 10:58:15
回答 9查看 12.1K关注 0票数 17

我试图在iOS应用程序中格式化货币值,并使用设备上当前的地区设置来使用适当的货币格式。

在模拟器中,一切似乎都运行得很好:当使用currencyFormatter.locale = Locale.current时,它采用正确的区域设置,并以正确的货币格式打印数字。

然而,在我的iPhone上,它是用法语配置的,具有法国的区域设置,我希望使用另一种格式(例如:1 234,56欧元)。但是它不起作用,而且似乎使用了英语格式样式(例如:欧元1234,56)。

事实上,如果我在设备上从我的应用程序中打印当前的区域设置,它就不会像我所期望的那样返回fr_FR

代码语言:javascript
运行
复制
NSLog(Locale.current.identifier)
>>> en_FR

该地区很好,但语言却不是,尽管该设备上的iOS显然是法语。

有人知道这件事吗?

谢谢!

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2018-01-07 15:33:44

基于@Romain的回答,first!的强制展开可以通过使用Locale.current.identifier作为后盾来避免。

代码语言:javascript
运行
复制
func getPreferredLocale() -> Locale {
    guard let preferredIdentifier = Locale.preferredLanguages.first else {
        return Locale.current
    }
    return Locale(identifier: preferredIdentifier)
}
票数 35
EN

Stack Overflow用户

发布于 2019-05-16 22:45:56

@Romain这里的问题是,您没有本地化您的应用程序的法语,但只为英语。

转到带有应用程序名称的左上角蓝色文件,选择Project > Info,在本地化区域,您将看到"English - Development Language“。按+并选择法语(fr)。

就这样。现在您可以使用Locale.current,如果设备(或模拟器)的第一语言是法语,则应用程序将显示法语货币格式。

票数 13
EN

Stack Overflow用户

发布于 2018-08-18 11:18:28

@florieger以分机的形式回答:

代码语言:javascript
运行
复制
import Foundation

extension Locale {
    static func preferredLocale() -> Locale {
        guard let preferredIdentifier = Locale.preferredLanguages.first else {
            return Locale.current
        }
        return Locale(identifier: preferredIdentifier)
    }
}

然后像这样使用它:

代码语言:javascript
运行
复制
dateFormatter.locale = Locale.preferredLocale()
datePicker.locale = Locale.preferredLocale()
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48136456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档