From 7682e5208d27e124708b8bf66998ed7548a3c1d2 Mon Sep 17 00:00:00 2001 From: demeteren Date: Fri, 9 Oct 2020 11:01:44 +0300 Subject: [PATCH] fix(localization): format negative values properly for Turkish locale --- .changeset/breezy-emus-rush.md | 5 +++++ packages/localize/src/number/forceTryCurrencyCode.js | 12 ++++++++---- packages/localize/test/number/formatNumber.test.js | 10 ++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 .changeset/breezy-emus-rush.md diff --git a/.changeset/breezy-emus-rush.md b/.changeset/breezy-emus-rush.md new file mode 100644 index 000000000..7af7169a3 --- /dev/null +++ b/.changeset/breezy-emus-rush.md @@ -0,0 +1,5 @@ +--- +'@lion/localize': patch +--- + +Fix formatting negative values for Turkish locale. diff --git a/packages/localize/src/number/forceTryCurrencyCode.js b/packages/localize/src/number/forceTryCurrencyCode.js index 67907f1e1..3882a0273 100644 --- a/packages/localize/src/number/forceTryCurrencyCode.js +++ b/packages/localize/src/number/forceTryCurrencyCode.js @@ -4,13 +4,17 @@ * @param {import('../../types/LocalizeMixinTypes').FormatNumberOptions} [options] * @returns {FormatNumberPart[]} */ + export function forceTryCurrencyCode(formattedParts, { currency, currencyDisplay } = {}) { const result = formattedParts; - // Change the currency code from TRY to TL, for Turkey if (currency === 'TRY' && currencyDisplay === 'code') { - if (result[0].value === 'TRY') { - result[0].value = 'TL'; - } + result.map(part => { + const newPart = part; + if (part.type === 'currency') { + newPart.value = 'TL'; + } + return newPart; + }); } return result; } diff --git a/packages/localize/test/number/formatNumber.test.js b/packages/localize/test/number/formatNumber.test.js index 35d6aedcd..b03ccd9d9 100644 --- a/packages/localize/test/number/formatNumber.test.js +++ b/packages/localize/test/number/formatNumber.test.js @@ -329,6 +329,16 @@ describe('formatNumber', () => { expect(formatNumber(123456.789, currencySymbol('JPY'))).to.equal('¥123.457'); expect(formatNumber(123456.789, currencySymbol('TRY'))).to.equal('₺123.456,79'); }); + + it('forces turkish currency code ', () => { + localize.locale = 'tr-TR'; + expect( + formatNumber(1234.56, { style: 'currency', currencyDisplay: 'code', currency: 'TRY' }), + ).to.equal('1.234,56 TL'); + expect( + formatNumber(-1234.56, { style: 'currency', currencyDisplay: 'code', currency: 'TRY' }), + ).to.equal('−1.234,56 TL'); + }); }); }); });