1.0.9 • Published 3 years ago

@huz-com/i18n v1.0.9

Weekly downloads
-
License
ISC
Repository
gitlab
Last release
3 years ago

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" 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 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

ClassDateType
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'}
1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago