Skip to content

Commit 059d085

Browse files
Asher Limfacebook-github-bot
authored andcommitted
fix: specify currency in locale identifier when formatting currency plural (#919)
Summary: Intl.NumberFormat does not respect the currency input when currencyDisplay is "name". Without currencyDisplay, currency is correctly taken into account. Resolves #914 Pull Request resolved: #919 Test Plan: Build Hermes and installed on RN application, tested against multiple currency/locale pairs. ``` new Intl.NumberFormat('de-DE', { style: 'currency', currency, currencyDisplay: 'name', }).format(2) ``` Reviewed By: mhorowitz Differential Revision: D43437187 Pulled By: neildhar fbshipit-source-id: 47a7b322fbb498e431b7db9130da3a852c5de873
1 parent 4fef3ad commit 059d085

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

lib/Platform/Intl/PlatformIntlApple.mm

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2468,18 +2468,16 @@ uint8_t getCurrencyDigits(std::u16string_view code) {
24682468
// - compactDisplay is not supported.
24692469
// - signDisplay is not supported.
24702470
// - NSNumberFormatter has maximumIntegerDigits, which is 42 by default
2471-
auto nsLocale =
2472-
[NSLocale localeWithLocaleIdentifier:u16StringToNSString(dataLocale_)];
2471+
std::u16string nsLocaleStr = dataLocale_;
24732472
nsNumberFormatter_ = [NSNumberFormatter new];
2474-
nsNumberFormatter_.locale = nsLocale;
24752473
if (style_ == u"decimal") {
24762474
nsNumberFormatter_.numberStyle = NSNumberFormatterDecimalStyle;
24772475
if (notation_ == u"scientific") {
24782476
nsNumberFormatter_.numberStyle = NSNumberFormatterScientificStyle;
24792477
}
24802478
} else if (style_ == u"currency") {
24812479
nsNumberFormatter_.numberStyle = NSNumberFormatterCurrencyStyle;
2482-
nsNumberFormatter_.currencyCode = u16StringToNSString(*currency_);
2480+
nsLocaleStr.append(u"@currency=").append(*currency_);
24832481
if (currencyDisplay_ == u"code") {
24842482
nsNumberFormatter_.numberStyle = NSNumberFormatterCurrencyISOCodeStyle;
24852483
} else if (currencyDisplay_ == u"symbol") {
@@ -2507,6 +2505,9 @@ uint8_t getCurrencyDigits(std::u16string_view code) {
25072505
nsNumberFormatter_.maximumSignificantDigits = significantDigits_->maximum;
25082506
}
25092507
nsNumberFormatter_.usesGroupingSeparator = useGrouping_;
2508+
auto nsLocale =
2509+
[NSLocale localeWithLocaleIdentifier:u16StringToNSString(nsLocaleStr)];
2510+
nsNumberFormatter_.locale = nsLocale;
25102511
if (style_ == u"unit") {
25112512
nsMeasurementFormatter_ = [NSMeasurementFormatter new];
25122513
nsMeasurementFormatter_.numberFormatter = nsNumberFormatter_;

0 commit comments

Comments
 (0)