@huz-com/i18n

I18n builder & flatter for current language

Usage no npm install needed!

<script type="module">
  import huzComI18n from 'https://cdn.skypack.dev/@huz-com/i18n';
</script>

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

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