Порядок символов валюты Android
Я получаю на устройствах с неанглийским языком, английские валюты отформатированы так:
1 $
Если у меня есть английская локаль, я получаю евро, например:
€ 1
С помощью
format.setCurrency(Currency.getInstance(currency));
return format.format(amount);
Найдено в документации:
http://developer.android.com/reference/java/util/Currency.html()
Возвращает локализованный символ валюты для этой валюты в локали. То есть, учитывая "USD" и Locale.US, вы получите "$", а если "USD" и локали за пределами США, вы получите "US$".
Если в локали указан только язык, а не язык и страна (например, Locale.JAPANESE или {new Locale("en", "")}, а не Locale.JAPAN или {new Locale("en", "US")}), код валюты ISO 4217 возвращается.
Если символ валюты для конкретной локали отсутствует, возвращается код валюты ISO 4217.
Это не тот же метод, но, вероятно, связанный. Почему локализация моего устройства влияет на порядок символов в валюте? 1$ неверно, независимо от того, какую локаль я использую.
Есть ли способ изменить это?
1 ответ
Поведение метода правильное.
Не все страны ожидают символ валюты до суммы.
Если вы всегда хотите, чтобы формат валюты соответствовал американизированным ожиданиям, оставьте локаль как Locale.US
, Если вы хотите, чтобы валюта отображалась локально, оставьте реализацию как есть.
Смотрите это краткое руководство (от Microsoft, не меньше):
Я думаю, что вы можете попытаться добиться, чтобы отобразить валюту в формате, соответствующем ее языку? Если это так, просто сопоставьте локаль с используемой валютой, прежде чем вызывать метод.
Обратите внимание, что формат может даже различаться в одной и той же стране. В Канаде часто говорят, что носители английского языка используют формат $50,00, тогда как франко-канадцы могут использовать 50,00 $.
Также посмотрите этот вопрос на UX: