1.0.5 • Published 5 years ago
@huz-com/i18n v1.0.5
Huz.Com > Component > I18N
- I18n builder & flatter for current language
Standards
- Language:
TS - Eslint:
Yes - Static Code Analysis:
YesIntelliJ Code Inspections - DDD - Document Driven:
Yes - EDD - Exception Driven:
Yes - TDD - Test Driven:
Yesgo to test folder - Standards Complied: Huz Standards
Commands
npm run clear// clears "dist" foldernpm run lint// runs eslint for static code analysisnpm run test// runs test files in "test" foldernpm run build// builds JS files at "dist" foldernpm publishornpm run publix// publishes "dist" folder to npm
Install
npm i @huz-com/i18n
Import
const {i18nString} = require('@huz-com/i18n');
//there are many most-used variations belowOptions
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<string>} |
| i18nAlphaMap | {[lang: string]: Record<string, string>} |
| i18nBoolean | {[lang: string]: boolean} |
| i18nBooleanArray | {[lang: string]: Array<boolean>} |
| i18nBooleanMap | {[lang: string]: Record<string, boolean>} |
| i18nDescription | {[lang: string]: string} |
| i18nDescriptionArray | {[lang: string]: Array<string>} |
| i18nDescriptionMap | {[lang: string]: Record<string, string>} |
| i18nDigit | {[lang: string]: string} |
| i18nDigitArray | {[lang: string]: Array<string>} |
| i18nDigitMap | {[lang: string]: Record<string, string>} |
| i18nEmail | {[lang: string]: string} |
| i18nEmailArray | {[lang: string]: Array<string>} |
| i18nEmailMap | {[lang: string]: Record<string, string>} |
| i18nFloat | {[lang: string]: number} |
| i18nFloatArray | {[lang: string]: Array<number>} |
| i18nFloatMap | {[lang: string]: Record<string, number>} |
| i18nFolder | {[lang: string]: string} |
| i18nFolderArray | {[lang: string]: Array<string>} |
| i18nFolderMap | {[lang: string]: Record<string, string>} |
| i18nHost | {[lang: string]: string} |
| i18nHostArray | {[lang: string]: Array<string>} |
| i18nHostMap | {[lang: string]: Record<string, string>} |
| i18nInteger | {[lang: string]: number} |
| i18nIntegerArray | {[lang: string]: Array<number>} |
| i18nIntegerMap | {[lang: string]: Record<string, number>} |
| i18nIsoDate | {[lang: string]: string} |
| i18nIsoDateArray | {[lang: string]: Array<string>} |
| i18nIsoDateMap | {[lang: string]: Record<string, string>} |
| i18nIsoDatetime | {[lang: string]: string} |
| i18nIsoDatetimeArray | {[lang: string]: Array<string>} |
| i18nIsoDatetimeMap | {[lang: string]: Record<string, string>} |
| i18nIsoTime | {[lang: string]: string} |
| i18nIsoTimeArray | {[lang: string]: Array<string>} |
| i18nIsoTimeMap | {[lang: string]: Record<string, string>} |
| i18nRegExp | {[lang: string]: RegExp} |
| i18nRegExpArray | {[lang: string]: Array<RegExp>} |
| i18nRegExpMap | {[lang: string]: Record<string, RegExp>} |
| i18nRichText | {[lang: string]: string} |
| i18nRichTextArray | {[lang: string]: Array<string>} |
| i18nRichTextMap | {[lang: string]: Record<string, string>} |
| i18nString | {[lang: string]: string} |
| i18nStringArray | {[lang: string]: Array<string>} |
| i18nStringMap | {[lang: string]: Record<string, string>} |
| i18nTitle | {[lang: string]: string} |
| i18nTitleArray | {[lang: string]: Array<string>} |
| i18nTitleMap | {[lang: string]: Record<string, string>} |
| i18nUrl | {[lang: string]: string} |
| i18nUrlArray | {[lang: string]: Array<string>} |
| i18nUrlMap | {[lang: string]: Record<string, string>} |
| i18nUuid | {[lang: string]: string} |
| i18nUuidArray | {[lang: string]: Array<string>} |
| i18nUuidMap | {[lang: string]: Record<string, string>} |
Create Custom Variation
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<any>} values
* @returns {Array<SamplePerson>}
* */
static castArray(values) {
const list = [];
values.forEach(value => {
list.push(SamplePerson.cast(value));
});
return list;
}
}
export class I18nPerson extends AbstractI18n<SamplePerson> {
constructor() {
super(SamplePerson.cast);
}
}
export class I18nPersonArray extends AbstractI18n<SamplePerson> {
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'}