@huz-com/i18n
v1.0.9
Published
I18n builder & flatter for current language
Downloads
12
Maintainers
Readme
Huz.Com > Component > I18N
- I18n builder & flatter for current language
Standards
- Language:
TS
- Eslint:
Yes
- Static Code Analysis:
Yes
IntelliJ Code Inspections - DDD - Document Driven:
Yes
- EDD - Exception Driven:
Yes
- TDD - Test Driven:
Yes
go 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 publish
ornpm 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 below
Options
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'}