# @huz-com/i18n

> I18n builder & flatter for current language

Latest version **1.0.9** (published 2021-06-30) · ISC license · 0 weekly downloads

## Install

```sh
npm install @huz-com/i18n
pnpm add @huz-com/i18n
yarn add @huz-com/i18n
bun add @huz-com/i18n
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.9 |
| Published | 2021-06-30 |
| First published | 2021-03-14 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 6 |
| Unpacked size | 89.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Mustafa Yelmer |
| Maintainers | e.buyuk, mustafayelmer |
| Keywords | internationalization, multi-language, i18n |

## Links

- npm: https://www.npmjs.com/package/@huz-com/i18n
- Repository: git@gitlab.azerdev.com:huz.byorbit/be/component/i18n
- npm.io page: https://npm.io/package/@huz-com/i18n

## Dependencies (6)

- [@huz-com/types](https://npm.io/package/@huz-com/types.md) ^1.0.3
- [@huz-com/logger](https://npm.io/package/@huz-com/logger.md) ^1.0.5
- [@huz-com/scalar](https://npm.io/package/@huz-com/scalar.md) ^1.0.7
- [@huz-com/callback](https://npm.io/package/@huz-com/callback.md) ^1.0.1
- [@huz-com/primitive](https://npm.io/package/@huz-com/primitive.md) ^1.0.2
- [@huz-com/base-errors](https://npm.io/package/@huz-com/base-errors.md) ^1.0.11

## Alternatives

- [messageformat](https://npm.io/package/messageformat.md) — 329.7K weekly downloads
- [@mintlify/scraping](https://npm.io/package/@mintlify/scraping.md) — 294.8K weekly downloads
- [@mintlify/previewing](https://npm.io/package/@mintlify/previewing.md) — 209.5K weekly downloads
- [@mintlify/prebuild](https://npm.io/package/@mintlify/prebuild.md) — 209.5K weekly downloads
- [@mintlify/link-rot](https://npm.io/package/@mintlify/link-rot.md) — 206.3K weekly downloads

## Recent versions

- 1.0.9 (latest) — 2021-06-30
- 1.0.8 — 2021-06-30
- 1.0.7 — 2021-04-28
- 1.0.5 — 2021-03-16
- 1.0.4 — 2021-03-16
- 1.0.3 — 2021-03-14
- 1.0.2 — 2021-03-14
- 1.0.1 — 2021-03-14

## 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](./test/Config.spec.ts)
- Standards Complied: [Huz Standards](https://gitlab.azerdev.com/huz.byorbit/be/documentation/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
````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<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
````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<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'}

````

---
_Source: https://npm.io/package/@huz-com/i18n · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
