diff --git a/packages/localize/src/LocalizeManager.js b/packages/localize/src/LocalizeManager.js index 67af4ae7f..6e0472bc5 100644 --- a/packages/localize/src/LocalizeManager.js +++ b/packages/localize/src/LocalizeManager.js @@ -181,6 +181,9 @@ export class LocalizeManager extends LionSingleton { } _onLocaleChanged(newLocale, oldLocale) { + if (newLocale === oldLocale) { + return; + } this.dispatchEvent(new CustomEvent('localeChanged', { detail: { newLocale, oldLocale } })); if (this._autoLoadOnLocaleChange) { this._loadAllMissing(newLocale, oldLocale); diff --git a/packages/localize/test/LocalizeManager.test.js b/packages/localize/test/LocalizeManager.test.js index ab262cb0e..bdcd28b72 100644 --- a/packages/localize/test/LocalizeManager.test.js +++ b/packages/localize/test/LocalizeManager.test.js @@ -1,4 +1,5 @@ import { expect, oneEvent } from '@open-wc/testing'; +import sinon from 'sinon'; import { fetchMock } from '@bundled-es-modules/fetch-mock'; import { setupFakeImport, resetFakeImport, fakeImport } from './test-utils.js'; @@ -48,6 +49,15 @@ describe('LocalizeManager', () => { expect(event.detail.oldLocale).to.equal('en-GB'); }); + it('does not fire "localeChanged" event if it was set to the same locale', () => { + const manager = new LocalizeManager(); + const eventSpy = sinon.spy(); + manager.addEventListener('localeChanged', eventSpy); + manager.locale = 'en-US'; + manager.locale = 'en-US'; + expect(eventSpy.callCount).to.equal(1); + }); + describe('addData()', () => { it('allows to provide inline data', () => { const manager = new LocalizeManager();