У меня есть приложение, которое делает то, о чем вы спрашиваете. Это позволяет пользователю выбрать определенный код валюты, а затем значения валют можно отформатировать в собственном языковом стандарте пользователя, но с использованием специального кода валюты.
Что я делаю, это создаю пользовательский идентификатор локали на основе собственной локали пользователя и конкретного кода валюты. Затем эта пользовательская локаль используется в качестве локали обычной настройки NumberFormatter
для стиля валюты.
// Pull apart the components of the user's locale
var locComps = Locale.components(fromIdentifier: Locale.current.identifier)
// Set the specific currency code
locComps[NSLocale.Key.currencyCode.rawValue] = "JPY" // or any other specific currency code
// Get the updated locale identifier
let locId = Locale.identifier(fromComponents: locComps)
// Get the new custom locale
let loc = Locale(identifier: locId)
// Create a normal currency formatter using the custom locale
let currFmt = NumberFormatter()
currFmt.locale = loc
currFmt.numberStyle = .currency
Все это предполагает, что вы хотите, чтобы числа появлялись так же, как текущий пользователь ожидал бы появления чисел. Формат номера не зависит от выбранного кода валюты. Даже положение символа валюты в результирующем выводе не зависит от конкретного кода.
Пользователь в США увидит валюты, отформатированные примерно так:
$ 1,234.56
€ 1,234.56
¥ 1235
пока пользователь в Германии увидит:
1.234,56 $
1.234,56 €
1,235 ¥