From ddb81576cf829a97a7f83f4fd2f0629e04c075e5 Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 1 Aug 2023 13:28:21 +0200 Subject: [PATCH] add support to replace tokens --- .../libs/localization-api/localize.controller.test.ts | 7 +++++++ .../src/libs/localization-api/localize.controller.ts | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/Umbraco.Web.UI.Client/src/libs/localization-api/localize.controller.test.ts b/src/Umbraco.Web.UI.Client/src/libs/localization-api/localize.controller.test.ts index 07bd99b59b..d2fd506690 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/localization-api/localize.controller.test.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/localization-api/localize.controller.test.ts @@ -23,6 +23,8 @@ const english = { general: { close: 'Close', logout: 'Log out', + withInlineToken: '{0} {1}', + withInlineTokenLegacy: '%0% %1%', numUsersSelected: (count: number) => { if (count === 0) return 'No users selected'; if (count === 1) return 'One user selected'; @@ -132,6 +134,11 @@ describe('UmbLocalizeController', () => { expect(element.localize.term('general_numUsersSelected', 1)).to.equal('One user selected'); expect(element.localize.term('general_numUsersSelected', 2)).to.equal('2 users selected'); }); + + it('should return a term with a custom format with inline tokens', async () => { + expect(element.localize.term('general_withInlineToken', 'Hello', 'World')).to.equal('Hello World'); + expect(element.localize.term('general_withInlineTokenLegacy', 'Hello', 'World')).to.equal('Hello World'); + }); }); describe('date', () => { diff --git a/src/Umbraco.Web.UI.Client/src/libs/localization-api/localize.controller.ts b/src/Umbraco.Web.UI.Client/src/libs/localization-api/localize.controller.ts index c7095b75cd..8c97bd5115 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/localization-api/localize.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/localization-api/localize.controller.ts @@ -113,6 +113,16 @@ export class UmbLocalizeController 0) { + // Replace placeholders of format "%index%" and "{index}" with provided values + term = term.replace(/(%(\d+)%|\{(\d+)\})/g, (match, _p1, p2, p3): string => { + const index = p2 || p3; + return String(args[index] || match); + }); + } + } + return term; }