npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

insta-locale

v1.1.0

Published

Reactive simplifed multi langauge locale module works with Angular, React, Vue or any nodejs based front-end app.

Downloads

6

Readme

insta-locale

Reactive simplifed multi language locale module that works with Angular, React, Vue or any nodejs based front-end app. The module allows you to have different langauges dictionaries, control styles direction according to selected language, sync the user language with browser localStorage, it also allows your components to listen to language change event.

Getting Started

These instructions will guide you to install and integrate the insta-locale module in your app.

Installing

install the module through npm

npm install --save insta-locale

Configuring

Go the the main file in your app and initialize the locale service, the main file will be main.ts in Angular for example, or index.jsx or index.tsx in React, its required to initialize the store before any of your components starts. In your main file import the getLocaleService function, if you are in typescript also import the LangaugeModel

import { getLocaleService, LangaugeModel } from 'insta-locale';

use the function to get a new reference to locale service

const localeService = getLocaleService();

define languages array

const languagesList: LangaugeModel[] = [
    {
        key: 'en',
        dir: 'ltr',
        dictionary: {
            'appTitle': 'My App',
        }
    },
    
    {
        key: 'ar',
        dir: 'rtl',
        dictionary: {
            'appTitle': 'تطبيقي',

        }
    },
    {
        key: 'fr',
        dir: 'ltr',
        dictionary: {
            'appTitle': 'mon application',
        }
    },
];

each language consists of three parameters

| Parameter | Discription | | ------ | ------ | | key | the language unique id, can by any string of your preference | | dir | the language direction, can be ltr for left direction based languages or rtl for right direction based languages | | dictionary | a json object with pairs of key/value the holds all labels of your app localised according to the language. Dictionaries of all langauges should have the same keys with localised values for each langauge |

init the locale service with the following parameters

localeService.init({
    languages: languagesList,
    defaultLangaugeKey: 'en',
    saveToBrowser: true,
    productionMode: false
});

the config consists of four parameters

| Parameter | Discription | Required | Default Value | | ------ | ------ | ------ | ------ | | languages | array of all your languages objects | Yes | | defaultLangaugeKey | the key of your app default language | Yes | | saveToBrowser | if true , language will be synced to browser localStorage | No | true | productionMode | if true , the app will not write any console warnings | No | false

Setting the language

The service by default will set the app language to the default language you specified in the config, unless the user has pre-saved language in the browser, it will take the browser saved one. To set the language manually from a component, go to the component where it needs to set the app language, and get instance of the service

import { getLocaleService } from 'insta-locale';
const localeService = getLocaleService();

then use the setLanguage function to set the desired language from your languages list

localeService.setLanguage('en');

if saveToBrowser is set to true, you should find the language saved in browser localStorage

Getting the current active langauge

to get the current active language, simple get instance of the service

import { getLocaleService } from 'insta-locale';
const localeService = getLocaleService();

then call the currentLanguage getter

const language = localeService.currentLanguage;
console.log(language);

it returns an object of {key: string, dir: string};

Listening to language change

if a component needs to listen to language change, go the component and get instance of the service

import { getLocaleService } from 'insta-locale';
const localeService = getLocaleService();

subscribe to languageChanged observable

localeService.languageChanged.subscribe((lang)=> {
    console.log(lang);
})

it emits an object of {key: string, dir: string} whenever language changes

Rendering app labels

to render the app labels in your template, go to the component that needs to render labels and get instance of the service

import { getLocaleService } from 'insta-locale';
const localeService = getLocaleService();

then get the label value using the i18n function, for example

const myApplicationName = localeService.118n('appTitle');
console.log(myApplicationName);

the argument of the i18n is any key defined in your dictionary, the above example will return these values in each language according the config we set earlier

| Language | Value | | ------ | ------ | | English (en) | "My App" | | Arabic (ar) | "تطبيقي" | | French (fr) | "mon application" |

in case you passed a key that doesn't exists, it will return the key itself, for example

const myText = localeService.118n('appBodyName');
console.log(myText);

it will always return appBodyName, and it wil throw a console warning if the you are not in production mode

Rendering app labels with parameters

alot of times you need to add a dynamic value inside your app labels, to do that simply add your variable name in the label surrounded by curly braces, for example:

const languagesList: LangaugeModel[] = [
   {
       key: 'en',
       dir: 'ltr',
       dictionary: {
           'appTitle': 'My App',
           'welcomeMessage: 'Hi {username}, welcome back'
       }
   },

here, the module expects a variable named username to be passed dynamically to the string, to pass the value pass it inside the vars object in the i18n function

const welcomeText = localeService.118n('welcomeMessage',{ username: 'Walid'});
console.log(myText);

it will return Hi Walid, welcome back;

in case you didn't pass the { username: 'Walid'} argument to i18n it will return the string without the variables and throw a console warning, for example

const welcomeText = localeService.118n('welcomeMessage');

it will return Hi , welcome back;

You can add as much variables as you want to every label in the dictionary.

App Direction

To handle multi app direction its prefered to use a module that allows css nesting like SASS or LESS. The locale module set the class of the app body tag to the language direction, so if you are in rtl language, inspect your body tag in browser and it should be <body class='rtl'>, now in your main style sheets add these rules

  
body {

    &.rtl {

        direction: rtl; 

    }

    &.ltr {

        direction: ltr;

    }

 }

and you can add any extra rules required for your app. To add specified styling for a component according to app directiom, go to the component styles .rtl & or .ltr &, rules, for example:

 .errorMessage {

     color: red;

     .ltr &{

       border-left: 5px solid red;
     }

     .rtl &{

       border-right: 5px solid red;
     }

 }

and your app will be running in multi directions styles.

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

License

This project is licensed under the MIT License - see the LICENSE.md file for details