piral-translate
Version:
Plugin for providing translated messages in Piral.
229 lines (213 loc) • 5.87 kB
text/typescript
/**
* @vitest-environment jsdom
*/
import create from 'zustand';
import { describe, it, expect } from 'vitest';
import { createLocaleApi, setupLocalizer } from './create';
describe('Create Localize API', () => {
const state = create(() => ({}));
const context: any = {
defineActions() {},
state,
readState(cb) {
return cb(state.getState());
},
dispatch(update) {
state.setState(update(state.getState()));
},
};
it('createApi can translate from global translations using the current language', () => {
const config = {
language: 'fr',
messages: {
fr: {
foo: 'bár',
bar: 'bár',
},
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
const result = api.translate('foo');
expect(result).toEqual('bár');
});
it('createApi can translate from local translations using the current language', () => {
const config = {
language: 'fr',
messages: {
fr: {
foo: 'bár',
bar: 'bár',
},
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
api.setTranslations({
fr: {
foo: 'boo',
},
});
const result = api.translate('foo');
expect(result).toEqual('boo');
});
it('createApi can translate from local-global translations using the current language', () => {
const config = {
language: 'fr',
messages: {
fr: {
foo: 'bár',
bar: 'bár',
},
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
api.setTranslations({
fr: {
foo: 'boo',
},
});
const result = api.translate('bar');
expect(result).toEqual('bár');
});
it('createApi can translate from local-global translations using the current language and passed nested translations', () => {
const config = {
language: 'en',
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
api.setTranslations({
en: {
header: {
title: 'Hello world',
},
},
});
const result = api.translate('header.title');
expect(result).toBe('Hello world');
});
it('createApi falls back to standard string if language is not found', () => {
const config = {
language: 'en',
messages: {
fr: {
foo: 'bár',
bar: 'bár',
},
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
const result = api.translate('bar');
expect(result).toEqual('__en_bar__');
});
it('createApi falls back to standard string if key is not found', () => {
const config = {
language: 'fr',
messages: {
fr: {
foo: 'bár',
bar: 'bár',
},
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
const result = api.translate('qxz');
expect(result).toEqual('__fr_qxz__');
});
it('getTranslations return the translations', () => {
const config = {
language: 'fr',
messages: {
fr: {
foo: 'bár',
bar: 'bár',
},
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
api.setTranslations({
fr: {
foo: 'boo',
},
});
const result = api.getTranslations();
expect(result).toEqual({ fr: { foo: 'boo' } });
});
it('getCurrentLanguage return the current language', () => {
const config = {
language: 'fr',
messages: {
fr: {
foo: 'bár',
bar: 'bár',
},
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
const result = api.getCurrentLanguage();
expect(result).toEqual('fr');
});
it('addTranslations should add new translations if no value exists yet for the combination of language and key', (): void => {
const config = {
language: 'fr',
messages: {
fr: {
foo: 'fóo',
bar: 'bár',
},
},
};
const messagesToAdd = {
fr: {
foo: 'fóo (new)',
bar: 'bár (new)',
baz: 'báz (new)',
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
api.addTranslations([messagesToAdd]);
const result = api.translate('baz');
expect(result).toEqual(messagesToAdd.fr.baz);
});
it('addTranslations should add new translations if overwriting is enabled and a value already exists for the combination of language and key', (): void => {
const config = {
language: 'fr',
messages: {
fr: {
foo: 'fóo',
bar: 'bár',
},
},
};
const messagesToAdd = {
fr: {
foo: 'fóo (new)',
bar: 'bár (new)',
baz: 'báz (new)',
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
api.addTranslations([messagesToAdd]);
const result = api.translate('bar');
expect(result).toEqual(messagesToAdd.fr.bar);
});
it('addTranslations should not add new translations if overwriting is disabled and a value already exists for the combination of language and key', (): void => {
const config = {
language: 'fr',
messages: {
fr: {
foo: 'fóo',
bar: 'bár',
},
},
};
const messagesToAdd = {
fr: {
foo: 'fóo (neu)',
bar: 'bár (neu)',
baz: 'báz',
},
};
const api = (createLocaleApi(setupLocalizer(config))(context) as any)();
api.addTranslations([messagesToAdd], false);
const result = api.translate('bar');
expect(result).toEqual(config.messages.fr.bar);
});
});