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

@k14v/i18njs

v0.3.1

Published

Library to internationalize literals

Downloads

28

Readme

I18njs

i18njs it's made to intended simplify and normalize internationalization and make compatible with all kind of javascript environments.


Motivation

In general, many logics that has an exposed API to end users should have the accessibility to handle literals that the user can understand in their language. Many libraries try to solve this by using static translation catalogs, but typically when the catalog is heavily loaded with data, the scalability is actually seen to be well below performance. To handle this with a dynamic way, the store has the capability to load fragments of catalogs using remotes sources of data using a sourcemap to track the needed snippets, this becomes a logic asynchronous with smaller pieces of load that also can handle changes without impacting performance.

Using this system the library includes a feedback system to manage the current state and decide if its logic needs to be frozen to wait until the process is finished. This library offers many ways to manage it (subscriptions, events or promises).

Getting started

$ npm install --save @k14v/i18njs

i18n

src/i18n.js:21-134

Provides a instance of i18njs to handle multiple locales asynchronously

Parameters

Examples

const i18n = i18njs({
 locale: 'es',
 locales: ['de', 'es', 'en'],
 resolver: (locale) => ({ foo: 'bar' }),
});

Returns object i18n instance

options

src/i18n.js:29-29

Option struct.

Type: object

Properties

  • locale string? predefined default locale, if setted it will execute setLocale internally to load the locale resource, keep it undefined to handle this behaviour outside the logic.
  • locales (Array<string> | object)? Array of strings of available locales using the standard ISO_639-1
  • resolver function used to resolve asyncronous locale resources

i18n.trls

src/i18n.js:54-54

Translation singleton with all interpolation utilities corresponding to the current locale

Type: object

i18n.setLocale

src/i18n.js:61-72

Updates the current locale and refresh trls singleton

Parameters

Returns promise

i18n.getLocales

src/i18n.js:78-80

Obtain and array of string in ISO_639 format with all loaded locales

Returns Array Array of string ISO_639-1

i18n.getLocale

src/i18n.js:86-88

Obtain current locale ISO_639

Returns string ISO_639-1

i18n.getCatalog

src/i18n.js:94-96

Get current catalog of literal translations from cache

Returns object

i18n.getCatalogs

src/i18n.js:102-104

Get all catalogs of literal translations

Returns object

i18n.subscribe

src/i18n.js:125-125

Subcribe to the changes of loading state flow

Examples

const unsubscribe = i18n.subscribe(({ type, locale }) => {
  switch(type) {
    case 'loading':
      // dispatch function to handle loading state
      break;
    case 'loaded':
      // dispatch function to handle loading state
      break;
    case 'error':
      // dispatch function to handle error state
      break;
  }
});

Returns object

i18njs.fetch

src/i18n.js:151-151

Fetch i18n instance with preloaded locale resource

Examples

i18njs
  .fetch({
    locale: 'es',
    resolver: () => Promise.resolve({ 'foo': 'bar' })
    ...options
   })
  .then((i18n) => {
    i18n.trls.__('foo') // bar
  });

Using translators

trls.__('esto es una prueba')

Dynamic translations

const i18n = i18njs({
  locales: {
    en: {
      'Group': 'Grupo',
      'The cow': 'La vaca',
      'the fence': 'la valla',
      'The rabbit': 'El conejo',
      'the table': 'la mesa',
      'Sometimes I drink %d beers': {
        one: 'A veces me bebo una cerveza',
        other: 'A veces me bebo muchas cervezas',
      },
      '%s jumped over %s, %d times': {
        one: '%s saltó por encima de %s, una vez',
        other: '%s saltó por encima de %s, %d veces'
      }
    }
  },
});



i18n.trls.__('Sometimes I drink 1 beers')
// A veces me bebo una cerveza
i18n.trls.__('Sometimes I drink 10 beers')
// A veces me bebo muchas cervezas
i18n.trls.__('The cow jumped over the fence, 10 times')
// La vaca saltó por encima de la valla, 10 veces
i18n.trls.__('The rabbit jumped over the table, 1 times')
// El conejo saltó por encima de la mesa, una vez

Integrations

  • react https://github.com/k14v/react-i18njs

Peding changes

  • Implement source map