Валюта Plural Swift не позволяет конфигурировать - PullRequest
0 голосов
/ 11 февраля 2020

Я хочу удалить точку (".") Из NumberFormatter, потому что проблема с VoiceOver, который читает 20.000 (точка - разделитель в испанском sh), равно 20 вместо 20000.

В следующем примере вы можете проверить, что только currencyPlural является единственным NumberFormatter.Style, который объявляет полную строку для валюты, но игнорирует флаг usesGroupingSeparator.

Пример:

func formatTest(_ style:  NumberFormatter.Style, usesGroupingSeparator separator: Bool) -> String? {
    let formatter = NumberFormatter()
    formatter.locale = Locale(identifier: "es_CL")
    formatter.usesGroupingSeparator = separator
    formatter.numberStyle = style
    return formatter.string(from: NSNumber(value: 20000))
}


formatTest(.currency, usesGroupingSeparator: false) // "$20000"
formatTest(.currencyAccounting, usesGroupingSeparator: false) // "$20000"
formatTest(.currencyISOCode, usesGroupingSeparator: false) // "CLP 20000"
formatTest(.currencyPlural, usesGroupingSeparator: false) // "20.000 pesos chilenos"

formatTest(.currency, usesGroupingSeparator: true) // "$20.000"
formatTest(.currencyAccounting, usesGroupingSeparator: true) // "$20.000"
formatTest(.currencyISOCode, usesGroupingSeparator: true) // "CLP 20.000"
formatTest(.currencyPlural, usesGroupingSeparator: true) // "20.000 pesos chilenos"

Любая идея, как почини это? Пожалуйста, не публикуйте ответ, такой как удаление точки вручную, потому что я хочу использовать формат для нескольких языков.

Дополнительно: голос за кадром на испанском языке sh ВСЕГДА объявляйте $ в долларах, поэтому мне нужен полный текст.

1 Ответ

0 голосов
/ 29 марта 2020

Я хочу удалить точку (".") Из NumberFormatter, потому что проблема с VoiceOver, который читает 20.000 (точка - разделитель в испанском sh) как 20 вместо 20000 [...] Любой идея, как это исправить?

Выведите на экран отформатированный номер, который вы хотите, и заставьте VoiceOver считывать все, что вы хотите ⟹ вам не нужно удалять точку на экране. 100
Проблема в том, что VoiceOver не может полностью прочитать валюту, в то время как нет проблем с числами .

. Решение вашей проблемы может заключаться в добавлении валюты локали на сумму (только для VoiceOver ?) следующим образом:

@IBOutlet weak var myLabel: UILabel!

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        // Your function is used to display the formatted text.
        myLabel.text = formatTest(.currencyPlural,
                                  usesGroupingSeparator: true)

        let locale = Locale(identifier: "es_CL")

        let formatter = NumberFormatter()
        formatter.locale = locale
        formatter.numberStyle = .spellOut

        // Define the a11y label to be specifically read out by VoiceOver.
        myLabel.accessibilityLabel = formatter.string(from: 20000)! + " " + locale.localizedString(forCurrencyCode: locale.currencyCode!)!
    }

Даже если я не знаю ни одного слова по-испански sh, я изменил конфигурацию своего устройства, чтобы проверить его, и, по-видимому, это работает, как ожидалось. 101

Адаптируйте этот фрагмент кода к вашей среде, чтобы сохранить формат для нескольких языков и иметь автоматическую конфигурацию c VoiceOver для ваших локальных валют. ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...