From e94c6fd9d1d8827f535a8ae8faa2d230e961ae9d Mon Sep 17 00:00:00 2001 From: Dan <danrosenshain@gmail.com> Date: Fri, 3 May 2024 11:18:47 +0300 Subject: [PATCH] fix(core): pound symbol being replaced outside plural and selectordinal (#1928) --- packages/core/src/interpolate.test.ts | 7 +++++++ packages/core/src/interpolate.ts | 12 +++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/core/src/interpolate.test.ts b/packages/core/src/interpolate.test.ts index 7b385f8fb..b0501cdfe 100644 --- a/packages/core/src/interpolate.test.ts +++ b/packages/core/src/interpolate.test.ts @@ -71,6 +71,13 @@ describe("interpolate", () => { ) }) + it("should not replace `#` symbol outside plural and selectordinal", () => { + const cache = compile("#{place} in best seller list") + expect(interpolate(cache, "en", [])({ place: 7 })).toEqual( + "#7 in best seller list" + ) + }) + it("should replace more than one octothorpe symbols in message", () => { const plural = prepare("{value, plural, one {} other {# and #}}") diff --git a/packages/core/src/interpolate.ts b/packages/core/src/interpolate.ts index ef58ed0a5..921a48202 100644 --- a/packages/core/src/interpolate.ts +++ b/packages/core/src/interpolate.ts @@ -77,11 +77,14 @@ export function interpolate( return (values: Values = {}, formats?: Formats): string => { const formatters = getDefaultFormats(locale, locales, formats) - const formatMessage = (tokens: CompiledMessage | number | undefined) => { + const formatMessage = ( + tokens: CompiledMessage | number | undefined, + replaceOctothorpe: boolean = false + ) => { if (!Array.isArray(tokens)) return tokens return tokens.reduce<string>((message, token) => { - if (token === "#") { + if (token === "#" && replaceOctothorpe) { return message + OCTOTHORPE_PH } @@ -100,7 +103,10 @@ export function interpolate( ) { Object.entries(format as CompiledIcuChoices).forEach( ([key, value]) => { - interpolatedFormat[key] = formatMessage(value) + interpolatedFormat[key] = formatMessage( + value, + type === "plural" || type === "selectordinal" + ) } ) } else {