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

@singleton-i18n/js-core-sdk

v0.5.8

Published

A JavaScript Singleton client library for internationalization and localization that leverage data from Singleton service. The library works both for the browser and as a Node.js module.

Downloads

77

Readme

Singleton Library for Javascript Clients

Singleton for JavaScript Client is common lib developed by VMware G11n team to provide i18n support for JavaScript framework. The Client will communicate with Singleton server for fetching translation and i18n patterns. Besides Localization, JavaScript Client also provides I18n support for Datetime format, number format, currency and percent. JavaScript I18n service is based on CLDR data repository and keep the same scope in supported locales set.

Prerequisites

Run the Singleton service by following the instructions in here.

Ensure the following are installed and compatible with ES2015:

The lib works both for the browser and as a Node.js module which using ES2015 syntax.

How to build and use the client library

Clone the repository using Git.

git clone [email protected]:vmware/singleton.git g11n-js-client

Go to the project's root directory.

cd g11n-js-client

Checkout the client library branch

git checkout g11n-js-client

Download dependencies

npm install

Package the client library

Note: The client library has two package.json files, the default is package.json to generate the package available in the Node environment, and the other is package.client.json which will generate the package used in the browser environment.

npm pack

The library will be packaged in the same directory (eg. singleton-i18n-js-core-sdk-server-0.5.7.tgz)

Import the library in your ES2015 application

cd <root path of your app>
npm install <path-to-location-of-library-in-previous-step/singleton-i18n-js-core-sdk-server-0.5.7.tgz>

Configure your main module file :

const singletonCore = require('@singleton-i18n/js-core-sdk-server');
const bundle = require('./source.l10n');

module.exports.handle = (req, res, next) => {
    let currentLanguage = 'zh-Hans';
    let currentRegion = 'CN'
    let i18nClient = singletonCore.i18nClient.createInstance(
        {
            productID: 'CoreSDK',
            version: '1.0.0',
            component: 'ui',
            host: 'http://localhost:8091',
            language: currentLanguage,
            region: currentRegion,
            sourceBundles: [ bundle.ENGLISH ],
            i18nScope: [
                singletonCore.PatternCategories.DATE,
                singletonCore.PatternCategories.NUMBER,
                singletonCore.PatternCategories.CURRENCIES
            ],
            isPseudo: false,
        }
    );
    i18nClient.coreService.loadI18nData(
        () => {
            req.t = (key, args) => {
                return i18nClient.l10nService.getMessage(key, args);
            };
            req.formatDate = (value, pattern) => {
                return i18nClient.i18nService.formatDate(value, pattern);
            };
            req.formatPercent = (value) => {
                return i18nClient.i18nService.formatPercent(value);
            };
            req.formatNumber = (value) => {
                return i18nClient.i18nService.formatNumber(value);
            };
            req.formatCurrency = (value, currencyCode) => {
                return i18nClient.i18nService.formatCurrency(value,currencyCode);
            };
            next();
        }
    )
}
  • You may now use the Singleton client library in your Angular application.

Sample code

Now this sample application is running in the Node environment and using the Express Framework, the Browser environment sample will be updated soon.

const express = require('express');
const i18nHandler = require('./i18n/i18nHandler')

const app = express();
const port = process.env.PORT || 8000;

app.use(i18nHandler.handle);

app.get('/', (req, res) => {
  let _Thead=`<thead><tr><th>Type</th><th>Input</th><th>Output</th></tr></thead>`
  let _Tbody=`<tbody>
    <tr align='center'><td>Datetime</td><td>${new Date()}</td><td>${req.formatDate(new Date(),'medium')}</td></tr>
    <tr align='center'><td>Percent</td><td>0.5569</td><td>${req.formatPercent('0.5569')}</td></tr>
    <tr align='center'><td>Number</td><td>1.2345</td><td>${req.formatNumber('1.2345')}</td></tr>
    <tr align='center'><td>Currency</td><td>2.5445</td><td>${req.formatCurrency('2.5445','USD')}</td></tr>
  </tbody>`

  res.send(`${req.t('title')}</br></br><table border='1' width="60%">${_Thead}${_Tbody}</table>`);
});

app.listen(port, (err) => {
  console.log(`Server is listening on port ${port}`);
});

Existing features

I18n Service

formatDate:

/**
- Format date time string according to current language
- and region. Timezone uses host system settings as default value
- @param {string | number | Date} date The date to format, as a Date, or milliseconds
- @param {string} pattern The definition of the format
  */
i18nClient.i18nService.formatDate(date: any, pattern: string="mediumDate", timezone?: string); 

formatNumber:

/**
- Transform a number to a locale string based on the pattern
- @param {number} value The number to format
*/
i18nClient.i18nService.formatNumber(value: any,language?: string); 

formatPercent:

/**
- Transform a decimal to a locale percentage based on the pattern
- @param {decimal} value The decimal to format
*/
i18nClient.i18nService.formatPercent(value: any);

formatCurrency:

/**
- Transform a number to a number with a currency symbol according to the currencyCode
- @param {number} value The number to format
- @param {string} currencies symbol
- @param {string = 'USD'} currencies symbol
*/ 
i18nClient.i18nService.formatCurrency(value: any, currencyCode: string = 'USD'); 

L10N Service

getMessage:

/**
- Get localized message from the cache according to the current language
- @param {string} key the key refer to the message
- @param {string[]} args the values of interpolation variables
*/
i18nClient.l10nService.getMessage(key: string, args?: any[] | {});

Sample application

A sample application is provided here.

Note: If you want to run the sample application, you must start the Singleton service here. Please use HTTP in the test environment, the port number should be modified according to the actual situation.