I18n builder & flatter for current language
npm install @huz-com/i18n- I18n builder & flatter for current language
TSYesYes IntelliJ Code InspectionsYesYesYes go to test foldernpm run clear // clears "dist" folder
- npm run lint // runs eslint for static code analysis
- npm run test // runs test files in "test" folder
- npm run build // builds JS files at "dist" folder
- npm publish or npm run publix // publishes "dist" folder to npmInstall
npm i @huz-com/i18nImport
``javascript
const {i18nString} = require('@huz-com/i18n');
//there are many most-used variations below
``Options
``javascript
const {i18nOption} = require('@huz-com/i18n');i18nOption
// which languages are viewable at client side
.setAvailableLanguagesFn(() => ['tr', 'en'])
// if empty response at admin side
.setInitialLanguagesFn(() => ['en'])
// which languages is editable at admin site
.setManagedLanguagesFn(() => ['en', 'tr', 'de']);
``Built-in Variations
Class | DateType
--- | ---
i18nAlpha | {[lang: string]: string}
i18nAlphaArray | {[lang: string]: Array}
i18nAlphaMap | {[lang: string]: Record}
i18nBoolean | {[lang: string]: boolean}
i18nBooleanArray | {[lang: string]: Array}
i18nBooleanMap | {[lang: string]: Record}
i18nDescription | {[lang: string]: string}
i18nDescriptionArray | {[lang: string]: Array}
i18nDescriptionMap | {[lang: string]: Record}
i18nDigit | {[lang: string]: string}
i18nDigitArray | {[lang: string]: Array}
i18nDigitMap | {[lang: string]: Record}
i18nEmail | {[lang: string]: string}
i18nEmailArray | {[lang: string]: Array}
i18nEmailMap | {[lang: string]: Record}
i18nFloat | {[lang: string]: number}
i18nFloatArray | {[lang: string]: Array}
i18nFloatMap | {[lang: string]: Record}
i18nFolder | {[lang: string]: string}
i18nFolderArray | {[lang: string]: Array}
i18nFolderMap | {[lang: string]: Record}
i18nHost | {[lang: string]: string}
i18nHostArray | {[lang: string]: Array}
i18nHostMap | {[lang: string]: Record}
i18nInteger | {[lang: string]: number}
i18nIntegerArray | {[lang: string]: Array}
i18nIntegerMap | {[lang: string]: Record}
i18nIsoDate | {[lang: string]: string}
i18nIsoDateArray | {[lang: string]: Array}
i18nIsoDateMap | {[lang: string]: Record}
i18nIsoDatetime | {[lang: string]: string}
i18nIsoDatetimeArray | {[lang: string]: Array}
i18nIsoDatetimeMap | {[lang: string]: Record}
i18nIsoTime | {[lang: string]: string}
i18nIsoTimeArray | {[lang: string]: Array}
i18nIsoTimeMap | {[lang: string]: Record}
i18nRegExp | {[lang: string]: RegExp}
i18nRegExpArray | {[lang: string]: Array}
i18nRegExpMap | {[lang: string]: Record}
i18nRichText | {[lang: string]: string}
i18nRichTextArray | {[lang: string]: Array}
i18nRichTextMap | {[lang: string]: Record}
i18nString | {[lang: string]: string}
i18nStringArray | {[lang: string]: Array}
i18nStringMap | {[lang: string]: Record}
i18nTitle | {[lang: string]: string}
i18nTitleArray | {[lang: string]: Array}
i18nTitleMap | {[lang: string]: Record}
i18nUrl | {[lang: string]: string}
i18nUrlArray | {[lang: string]: Array}
i18nUrlMap | {[lang: string]: Record}
i18nUuid | {[lang: string]: string}
i18nUuidArray | {[lang: string]: Array}
i18nUuidMap | {[lang: string]: Record} Create Custom Variation
``javascript
const {AbstractI18n} = require('@huz-com/i18n');
/**
* Assume that, you want to assign a person to each language
/
class SamplePerson {
id = null;
name = null;
/**
* @param {any} value
* @returns {SamplePerson}
/
static cast(value) {
const obj = SamplePerson();
obj.id = value?.id || null;
obj.name = value?.name || null;
//validates value is {id: string, name: string}
return obj;
}
/**
* @param {Array} values
* @returns {Array}
/
static castArray(values) {
const list = [];
values.forEach(value => {
list.push(SamplePerson.cast(value));
});
return list;
}
}
export class I18nPerson extends AbstractI18n {
constructor() {
super(SamplePerson.cast);
}
}
export class I18nPersonArray extends AbstractI18n {
constructor() {
super(SamplePerson.castArray);
}
}
const i18nPerson = new I18nPerson();
//DEF_KEY is "__" it will be filled by default language (languageDefault)
//Invalid language will be removed, only languageAvailableList keys will be seved
i18nPerson.cast({en: {id:5}, invalidLang: {id:23, name: 'dummy'}}); //{__: {id:5, name: null}, en: {id:5, name: null}}
//Plain value (not-i18n) will be converted as i18n
i18nPerson.cast(req, {id:7}) //{__: {id:7, name: null}, en: {id:7, name: null}}
//DEF_KEY will be removed
i18nPerson.view(req, {__: {id:7, name: 'Eric'}, en: {id:7, name: 'Eric'}, de: {id:34, name: 'Hans'}}) //{en: {id:7, name: 'Eric'}, de: {id:34, name: 'Hans'}}
//it based on languageDefaultList, ie: if it is ['en', 'de']
i18nPerson.def(req) //{en: {id:null, name: null}, de: {id:null, name: null}}
//it based on languageDefault, ie: if it is 'de'
i18nPerson.mapToPlain(req, {__: {id:7, name: 'Eric'}, en: {id:7, name: 'Eric'}, de: {id:34, name: 'Hans'}}) //{id:34, name: 'Hans'}
```