Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions src/i18n/i18n.ts
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ export function setLocale(options: SetLocaleOptions = {}): Promise<string> | str
if (loadFallback && fallbackLoader && fallbackLoader !== true) {
loaderPromises.push(fallbackLoader());
}

Globalize.loadMessages({ [requestedLocale]: {} });
if (loaderPromises.length) {
return loadCldrData(
loaderPromises,
Expand All @@ -246,8 +246,6 @@ export function setLocale(options: SetLocaleOptions = {}): Promise<string> | str
isLocal,
invalidator
);
} else if (!matchedLocale) {
Globalize.loadMessages({ [requestedLocale]: {} });
}

setI18nLocales(calculatedLocale, isDefault, isLocal);
Expand Down
34 changes: 34 additions & 0 deletions tests/i18n/unit/i18n.ts
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,40 @@ describe('i18n', () => {
assert.isFalse(isPlaceholder);
});

it('Resolves unregistered messages bundles', async () => {
const fallback = createAsyncMessageLoader();
const invalidator = stub();
setDefaultLocale('fr');
setSupportedLocales(['fr', 'en']);
setCldrLoaders({
fallback: fallback.loader
});
await setLocale({ locale: 'fr' });
const en = createAsyncMessageLoader();
const bundle = {
messages: { foo: 'bonjour, {name}', fallback: 'root/fr fallback' },
locales: {
en: en.loader
}
};

let { messages, format, isPlaceholder } = localizeBundle(bundle, { invalidator });
assert.deepEqual(messages, { foo: 'bonjour, {name}', fallback: 'root/fr fallback' });
assert.strictEqual(format('foo', { name: 'Steven' }), 'bonjour, Steven');
assert.isFalse(isPlaceholder);
await setLocale({ locale: 'en-GB' });
({ messages, format, isPlaceholder } = localizeBundle(bundle, { locale: 'en-GB', invalidator }));
assert.deepEqual(messages, { foo: '', fallback: '' });
assert.strictEqual(format('foo', { name: 'Steven' }), '');
assert.isTrue(isPlaceholder);
en.resolver({ default: { foo: 'Hello, {name}' } });
await en.promise;
({ messages, format, isPlaceholder } = localizeBundle(bundle, { locale: 'en-GB', invalidator }));
assert.deepEqual(messages, { foo: 'Hello, {name}', fallback: 'root/fr fallback' });
assert.strictEqual(format('foo', { name: 'Steven' }), 'Hello, Steven');
assert.isFalse(isPlaceholder);
});

it('should use fallback message bundle resolution for a non localised app', async () => {
const invalidator = stub();
const bundle = {
Expand Down