mirror of
https://github.com/codex-team/editor.js
synced 2024-05-06 16:36:47 +02:00
63eeec0f3b
Co-authored-by: George Berezhnoy <gohabereg@users.noreply.github.com> Co-authored-by: Georgy Berezhnoy <gohabereg@gmail.com> Co-authored-by: tasuku-s <tasuku@freemind.co.jp> Co-authored-by: Athul Anil Kumar <athul7744@outlook.com> Co-authored-by: Taly <vitalik7tv@yandex.ru> Co-authored-by: flaming-cl <51183663+flaming-cl@users.noreply.github.com> Co-authored-by: Nguyen Ngoc Son <sonnn.se@gmail.com> Co-authored-by: Sisir Das K <37764463+sis-dk@users.noreply.github.com> Co-authored-by: Sisir <sisir@hellosivi.com>
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import defaultDictionary from './locales/en/messages.json';
|
||
import { DictNamespaces } from '../../types-internal/i18n-internal-namespace';
|
||
import { typeOf } from '../utils';
|
||
|
||
/**
|
||
* Evaluate messages dictionary and return object for namespace chaining
|
||
*
|
||
* @param dict - Messages dictionary
|
||
* @param [keyPath] - subsection path (used in recursive call)
|
||
*/
|
||
function getNamespaces(dict: object, keyPath?: string): DictNamespaces<typeof defaultDictionary> {
|
||
const result = {};
|
||
|
||
Object.entries(dict).forEach(([key, section]) => {
|
||
if (typeOf(section) === 'object') {
|
||
const newPath = keyPath ? `${keyPath}.${key}` : key;
|
||
|
||
/**
|
||
* Check current section values, if all of them are strings, so there is the last section
|
||
*/
|
||
const isLastSection = Object.values(section).every((sectionValue) => {
|
||
return typeOf(sectionValue) === 'string';
|
||
});
|
||
|
||
/**
|
||
* In last section, we substitute namespace path instead of object with translates
|
||
*
|
||
* ui.toolbar.toolbox – "ui.toolbar.toolbox"
|
||
* instead of
|
||
* ui.toolbar.toolbox – {"Add": ""}
|
||
*/
|
||
if (isLastSection) {
|
||
result[key] = newPath;
|
||
} else {
|
||
result[key] = getNamespaces(section, newPath);
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
result[key] = section;
|
||
});
|
||
|
||
return result as DictNamespaces<typeof defaultDictionary>;
|
||
}
|
||
|
||
/**
|
||
* Type safe access to the internal messages dictionary sections
|
||
*
|
||
* @example I18n.ui(I18nInternalNS.ui.blockTunes.toggler, 'Click to tune');
|
||
*/
|
||
export const I18nInternalNS = getNamespaces(defaultDictionary);
|