.then(() => { // eslint-disable-next-line global-require let i18nData = {}; try { if (locale !== langToLocale(config.get('defaultLang'))) { // eslint-disable-next-line global-require, import/no-dynamic-require i18nData = require( `../../locale/${locale}/${appInstanceName}.js`); } } catch (e) { log.info( `Locale JSON not found or required for locale: "${locale}"`); log.info( `Falling back to default lang: "${config.get('defaultLang')}".`); } const i18n = makeI18n(i18nData, lang); const InitialComponent = ( <I18nProvider i18n={i18n}> <Provider store={store} key="provider"> <ReduxAsyncConnect {...renderProps} /> </Provider> </I18nProvider> ); const asyncConnectLoadState = store.getState().reduxAsyncConnect.loadState || {}; const reduxResult = getReduxConnectError(asyncConnectLoadState); if (reduxResult.status) { return showErrorPage(res, reduxResult.status); } return hydrateOnClient({ component: InitialComponent }); })
it('always returns a scoped moment instance', () => { const i18n = utils.makeI18n({}, 'fr', FakeJed); // Modifying the locale globally below does not affect the instance // created previously. moment.locale('de'); expect(i18n.moment().locale()).toEqual('fr'); });
it('falls-back to number.toLocaleString if Intl is not an object', () => { const numberFormatSpy = sinon.spy(Intl, 'NumberFormat'); const i18n = utils.makeI18n({}, 'de', FakeJed, { _Intl: false }); const toLocaleStringSpy = sinon.spy(Number.prototype, 'toLocaleString'); const number = 9518231; expect(i18n.formatNumber(number)).toEqual('9.518.231'); sinon.assert.calledWith(toLocaleStringSpy, 'de'); sinon.assert.notCalled(numberFormatSpy); });
it('falls-back to number.toLocaleString when Intl is missing a NumberFormat constructor', () => { const numberFormatSpy = sinon.spy(Intl, 'NumberFormat'); const i18n = utils.makeI18n({}, 'fr', FakeJed, { _Intl: {} }); const toLocaleStringSpy = sinon.spy(Number.prototype, 'toLocaleString'); const number = 12345; expect(i18n.formatNumber(number)).toEqual('12 345'); sinon.assert.calledWith(toLocaleStringSpy, 'fr'); sinon.assert.notCalled(numberFormatSpy); });
it('Creates an Intl.NumberFormat instance and uses it for formatting', () => { const numberFormatSpy = sinon.spy(Intl, 'NumberFormat'); const i18n = utils.makeI18n({}, 'de', FakeJed); sinon.assert.calledWith(numberFormatSpy, 'de'); const toLocaleStringSpy = sinon.spy(Number.prototype, 'toLocaleString'); const number = 9518231; expect(i18n.formatNumber(number)).toEqual('9.518.231'); sinon.assert.notCalled(toLocaleStringSpy); });
it('tries to localise moment', () => { const i18nData = { options: { _momentDefineLocale: sinon.stub(), locale_data: { messages: { '': { lang: 'fr' } } }, }, }; const i18n = utils.makeI18n(i18nData, FakeJed); assert.equal(i18n.moment.locale(), 'fr'); });
it('always passes the locale to moment', () => { const i18nData = { options: { _momentDefineLocale: null, locale_data: { messages: { '': { lang: 'fr' } } }, }, }; const i18n = utils.makeI18n(i18nData, 'fr', FakeJed); expect(i18n.moment().locale()).toEqual('fr'); });
it('does not localise if _momentDefineLocale is not a function', () => { const i18nData = { options: { _momentDefineLocale: null, locale_data: { messages: { '': { lang: 'fr' } } }, }, }; const i18n = utils.makeI18n(i18nData, 'en', FakeJed); expect(i18n.moment().locale()).toEqual('en'); });
it('tries to localise moment', () => { const i18nData = { options: { _momentDefineLocale: sinon.stub(), locale_data: { messages: { '': { lang: 'fr' } } }, }, }; const i18n = utils.makeI18n(i18nData, 'fr', FakeJed); expect(i18n.moment().locale()).toEqual('fr'); sinon.assert.called(i18nData.options._momentDefineLocale); });
it('formats a date', () => { const i18n = utils.makeI18n({}, 'fr', FakeJed); expect(i18n.moment('1988-09-22').format('ll')).toEqual('22 sept. 1988'); });
it('formats a number', () => { const i18n = utils.makeI18n({}, 'en', FakeJed); expect(i18n.formatNumber(9518231)).toEqual('9,518,231'); });
it('exposes the lang', () => { const i18n = utils.makeI18n({}, 'af', FakeJed); expect(i18n.lang).toEqual('af'); });
it('adds a localised moment function to the i18n object', () => { const i18nData = {}; const i18n = utils.makeI18n(i18nData, 'en-US', FakeJed); expect(i18n.moment).toBeTruthy(); expect(typeof i18n.moment).toBe('function'); });
it('adds a localised moment to the i18n object', () => { const i18nData = {}; const i18n = utils.makeI18n(i18nData, FakeJed); assert.ok(i18n.moment); assert.typeOf(i18n.moment, 'function'); });