feat: add browser extension localization runtime
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/env node
|
||||
const assert = require('assert');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const root = path.resolve(__dirname, '..');
|
||||
const i18n = require(path.join(root, 'shared', 'i18n.js'));
|
||||
const en = JSON.parse(fs.readFileSync(path.join(root, 'shared', 'locales', 'en.json'), 'utf8'));
|
||||
const ru = JSON.parse(fs.readFileSync(path.join(root, 'shared', 'locales', 'ru.json'), 'utf8'));
|
||||
|
||||
assert.strictEqual(i18n.normalizePreference(undefined), 'system');
|
||||
assert.strictEqual(i18n.normalizePreference('de'), 'system');
|
||||
assert.strictEqual(i18n.normalizePreference('system'), 'system');
|
||||
assert.strictEqual(i18n.normalizePreference('en'), 'en');
|
||||
assert.strictEqual(i18n.normalizePreference('ru'), 'ru');
|
||||
|
||||
assert.strictEqual(i18n.resolveLocale('system', 'ru'), 'ru');
|
||||
assert.strictEqual(i18n.resolveLocale('system', 'ru-RU'), 'ru');
|
||||
assert.strictEqual(i18n.resolveLocale('system', 'RU-ru'), 'ru');
|
||||
assert.strictEqual(i18n.resolveLocale('system', 'uk-UA'), 'en');
|
||||
assert.strictEqual(i18n.resolveLocale('system', 'en-US'), 'en');
|
||||
assert.strictEqual(i18n.resolveLocale('en', 'ru-RU'), 'en');
|
||||
assert.strictEqual(i18n.resolveLocale('ru', 'en-US'), 'ru');
|
||||
|
||||
assert.deepStrictEqual(Object.keys(ru).sort(), Object.keys(en).sort());
|
||||
assert.ok(Object.values(en).every((value) => typeof value === 'string'));
|
||||
assert.ok(Object.values(ru).every((value) => typeof value === 'string'));
|
||||
|
||||
const tEn = i18n.createTranslator({ en, ru }, 'en');
|
||||
const tRu = i18n.createTranslator({ en, ru }, 'ru');
|
||||
assert.strictEqual(tRu('status.queued'), 'В очереди до запуска Верстака');
|
||||
assert.strictEqual(tEn('error.value', { error: 'offline' }), 'Error: offline');
|
||||
assert.strictEqual(tRu('missing', null, 'Fallback'), 'Fallback');
|
||||
assert.strictEqual(tRu('missing.key'), 'missing.key');
|
||||
|
||||
i18n.loadCatalogs((locale) => Promise.resolve(locale === 'ru' ? ru : en))
|
||||
.then((catalogs) => {
|
||||
assert.strictEqual(catalogs.en, en);
|
||||
assert.strictEqual(catalogs.ru, ru);
|
||||
console.log('browser extension localization runtime tests passed');
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error(error);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user