【问题标题】:Formatting percent number to zh (simplified Chinese) using the right percent sign (ie. %)使用正确的百分号(即%)将百分号格式化为 zh(简体中文)
【发布时间】:2020-06-26 10:10:21
【问题描述】:

我想使用NumberFormatter 来生成 zh 本地化百分比,如下所示,以取代我自己的代码,如下所示:

    let locale = Locale(identifier: lang)

    let formatter = NumberFormatter()
    formatter.locale = locale
    formatter.numberStyle = .percent
    formatter.maximumFractionDigits = d

    let number = NSNumber(value: Double(n))

    if let r = formatter.string(from: number) {
        if lang == "zh" { return r.replace(["%"], withString: "%")

        return r
    }
    // My fallback code

不幸的是,与我的代码不同,简体中文NumberFormatter 生成拉丁文% 符号而不是中文版(因此我做了替换补丁)。

我想知道是否可以进一步调整NumberFormatter 以便它处理它? (以及其他非拉丁语言)。

【问题讨论】:

    标签: swift percentage chinese-locale numberformatter


    【解决方案1】:

    您似乎暗示NumberFormatter 输出的内容不正确。但是,作为一个土生土长的中国人,我可以自信地说“50%”是在zh 语言环境中写百分比的自然方式。这一点从百度百科(维基百科中文版)article 中也可以看出。我从未见过任何带有全角百分比符号的应用程序写入百分比。我什至无法在我的 Mac 上使用中文 IME 输入它。

    在我看来,“50%”看起来很奇怪,可能是因为它混合了全角和半角字符。我偶尔会在日本网站上看到“50%”,但还是比较少见的。

    如果您真的需要,您可以在NumberFormatter 中设置percentSymbol 属性:

    let formatter = NumberFormatter()
    formatter.percentSymbol = "%"
    formatter.numberStyle = .percent
    print(formatter.string(from: 0.5) ?? "failed")
    

    说实话,我相信NumberFormatter 的输出,它是由一群专业的本地化工程师设计的。

    【讨论】:

    • 唉,这不处理本地化。
    • @StéphanedeLuca 是什么让你想到中国人使用全角百分号?根据我的经验,日本人似乎更多地使用它们......但无论如何,请参阅编辑。
    • @StéphanedeLuca 在某种意义上,设置locale 已经处理本地化。 % zh 语言环境中使用的正确符号。您所说的(应在zh 语言环境中使用全角百分号)是您自己定义的非标准本地化类型。您必须自己实施是很自然的。我的建议是,相信 NumberFormatter 的输出。
    猜你喜欢
    • 2019-01-14
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多