Форматирование числа процентов в zh (упрощенный китайский) с использованием правильного знака процента (ie. %) - PullRequest
2 голосов
/ 14 марта 2020

Я хотел бы использовать 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, чтобы он позаботился об этом? (и на других нелатинских языках).

1 Ответ

2 голосов
/ 14 марта 2020

Вы, похоже, подразумеваете, что то, что выводит NumberFormatter, неверно. Однако, как коренной китаец, я могу с уверенностью сказать, что «50%» - это естественный способ написания процента в локали zh. Это также видно из этого Baidu Baike (китайский аналог Википедии) статья . Я никогда не видел ни одного приложения, пишущего проценты со знаком полной ширины. Я даже не могу напечатать его с китайским IME на моей Ma c.

. На мой взгляд, "50 %" выглядит странно, возможно, потому что он смешивает символы полной ширины и полуширины. Я иногда видел «50 %» на японских сайтах, но это все еще довольно редко.

, если вы действительно хотите, вы можете установить свойство percentSymbol в NumberFormatter:

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

Если честно, я бы поверил в вывод NumberFormatter, который разработан группой профессиональных инженеров локализации.

...