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

@maeum/i18n-controller

v2.2.0

Published

maeum i18n controller

Downloads

60

Readme

i18n controller

ts Download Status Github Star Github Issues NPM version @maeum/i18n-controller License code style: prettier

The @maeum/i18n-controller is a package that helps developer to integreate node-polyglot. Developer can generate a i18n resource via json format file and then use as a singletone class in application(eg. fastify.js or express.js).

Why use @maeum/i18n-controller?

  • Support i18n feature in your application with less work
  • Front-end messages can be managed on server
    • For example, server redeployment allows message changes without front-end or iOS, Android app deployment
  • Manage messages as resource file to separate them from source code
    • Separated resource file it can be used in non-HTTP request/response code as well

Table of Contents

Getting Started

installation

npm install @maeum/i18n-controller --save

Configuration

// `localeRoot` is resource location
// `defaultLanguage` is fallback language
await I18nContainer.bootstrap({ localeRoot: './resource', defaultLanguge: 'en' }, true);

if (somethingError) {
  throw new Error(I18nContainer.it.t('en', 'common.error', { id: 'your pet id' }));
}

How to work?

The @maeum/i18n-controller implements i18n support using node-polyglot. You can use directories to create polyglot objects in multiple languages, and polyglot objects to manage and consume i18n messages.

flowchart LR
A01[<ul><li>resources</li><ul><li>en-gb<ul><li>common.json</li><li>pet.json</li></ul></li><li>en-us<ul><li>common.json</li><li>pet.json</li></ul></li><li>ko<ul><li>common.json</li><li>pet.json</li></ul></li></ul></ul>]
B01[<ul><li>Polyglot:en-gb</li><li>Polyglot:en-us</li><li>Polyglot:ko</li></ul>]
C01["Polyglot:en-gb.t('common.error')"]
C02["Polyglot:en-gb.t('pet.name.require')"]

A01-->B01
B01-->C01
B01-->C02

Each resource files, like common.json, use jsonc-parser to read in content, so you can add comments to the resource file.

{
  // korean common error message
  // you can add comments in resource file
  "error": "An error occurred, please try again later"
}

Usage

// synchronous bootstrap
I18nContainer.bootstrap({ localeRoot: './resources' }, false);

// asynchronous bootstrap
await I18nContainer.bootstrap({ localeRoot: './resources' }, true);

// custom polyglot function
// @see https://github.com/airbnb/polyglot.js#options-overview
await I18nContainer.bootstrap({ localeRoot: './resources', polyglot: { ...your custom option } }, true);

// translate function
I18nContainer.it.t('common.error', { id: 'petId' });

Option overview

Detail option can check here.

| name | type | required | description | | ---------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | localeRoot | string | required | Specify the location of the resource file | | defaultLanguage | string | | Specify the default language. If no language is found when using t function (translate function), the default language translation function is used | | polyglot.allowMissing | boolean | | a boolean to control whether missing keys in a t call are allowed. If false, by default, a missing key is returned and a warning is issued | | polyglot.interpolation | object | | an object to change the substitution syntax for interpolation by setting the prefix and suffix fields | | polyglot.onMissingKey | function | | if allowMissing is true, and this option is a function, then it will be called instead of the default functionality. Arguments passed to it are key, options, and locale. The return of this function will be used as a translation fallback when polyglot.t('missing.key') is called (hint: return the key) | | pluralRules | object | | an object of pluralTypes and pluralTypeToLanguages to control pluralization logic |

License

This software is licensed under the MIT.