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

gomoob.i18n

v1.0.0-alpha.4

Published

Polyglot.js extended to load JSON translation files and cache them.

Downloads

4

Readme

gomoob.i18n

Polyglot.js extended to load JSON translation files and cache them.

gomoob.i18n is an extension to the AirBnb Polyglot.js translation library.

Quick start

The main goals of gomoob.i18n are :

  • Provide an easy to use load method to dynamically load translation files using ajax HTTP requests and reconfigure Polyglot automatically ;
  • Manage translations embedded in a DOM node to speedup first page display, then switch to translation loading using HTTP ;
  • Cache translation files on client side, in memory, in the Local Storage or using a custom cache manager. Version your translation files to only reload translations when its needed ;
  • Easy management of several translations, for example an application could have a set of translations per module or per sub-application.

Here is a simple sample used to load a JSON translation file using the library.

// Configure a Polyglot instance with URL builder used to locate JSON translation files on a particular server
var polyglot = new Polyglot(
    {
        urlBuilder : function(type, locale, version) {
            return 'https://myserver.com/i18n/' + type + '/' + locale + '.json?v=' + version;
        }
    }
);

// Loads French translations from 'https://myserver.com/i18n/connected/fr.json?v=0.1.0'
polyglot.load(
    {
        type : 'connected',
        locale : 'fr',
        version : '0.1.0', 
        success : function(data, textStatus, jqXHR) { ... }, 
        error : function(jqXHR, textStatus, errorThrown) { ... }           
    }
);

Here the fr.json file will be automatically fetched, then the polyglot instance will be reconfigured with the fetched translations.

gomoob.i18n uses a client side cache to persist the translations, by default if you call the the load method two times successively then the first call will get the JSON translations and put them into the cache. The second call will check if their is a cache key for the tuple {type, locale, version}, if their is then the translations are pulled from the cache.

Setup

Install

Bower is available on bower.io and npmjs.org.

Bower

bower install gomoob.i18n

Node

npm i gomoob.i18n --save

Use

gomoob.i18n is an UMD module, so its very easy to use it.

Browserify

Use gomoob.i18n with Browserify.

var polyglot = require('gomoob.i18n');

...

RequireJS

Use gomoob.i18n with RequireJS.

define(['gomoob.i18n'], function(Polyglot) {

   ...
   
});

Old school

<script type="text/javascript" src="js/libs/polyglot.min.js" />
<script type="text/javascript" src="js/libs/gomoob.i18n.min.js" />
var polyglot = new Polyglot();
...

Additional Polyglot methods

cache(type, locale, version, phrases)

TODO

load(options)

Loads translations associated to the type, locale and version parameters, internally this method will build a URL using the URL builder configures in the Polyglot instance.

Each time translations are successfully fetched they are put in a translation cache by default, so subsequent calls to the method and for the same {type, locale, version} tuple will not perform not necessary HTTP requests and pull translations from the cache.

If for some reasons your need to force a refresh of a cache entry you can call the method with the forceReload option.

Sample

polyglot.load(
    {
        forceReload : false,
        type : 'sub-module-a',
        locale : 'fr',
        version : '0.1.0', 
        success : function(data, textStatus, jqXHR) {
        
            // Translation file successfully loaded and cached, polyglot instance re-configured
        
        }, 
        error : function(jqXHR, textStatus, errorThrown) {
        
            // Fails to load the translation file
        
        }           
    }
);

The input parameters of the load(options) method are documented in the following sub-sections.

error

The error(jqXHR jqXHR, String textStatus, String errorThrown) option allows to define a callback method to be called when loading of a translation file with HTTP fails. This method has exactly the same parameters an the jQuery AJAX error method.

forceReload

TODO

locale

TODO

success

The success(data, textStatus, jqXHR) option allows to define a callback method to be called when loading of a translationis successful. This method has exactly the same parameters an the jQuery AJAX success method.

If the success method is called it means that

  • The HTTP ajax request used to pull the translation file is successful
  • The translations (i.e that associated Polyglot phrases) have been cached successfully
  • The Polyglot instance has been automatically re-configured with the pulled translations

Please note that if the translations are loaded from the cache the textStatus and jqXHR parameters are undefined.

type

TODO

version

TODO

type(newType)

TODO

version(newVersion)

TODO

Build commands

gulp

Best practices & recipies

This section describe useful best practices we use everyday inside our JS projects.

Use a Polyglot singleton

TODO

Speedup first time display

/**
 * The first time the 'index.html' file is loaded all the translations required by public pages are embedded into an 
 * `i18n` DOM element in the page. 
 * 
 * This `i18n` element MUST HAVE 3 `data-` attributes defined : 
 *  * `locale`  : The name of the locale associated to translations, in most cases this will be equal to the `lang` 
 *                attribute but its not an obligation. For example the server could implement a custom language 
 *                detection while the `index.html` page is requested and inject a `locale` which is the result of a 
 *                custom heuristic ;
 *  * `phrases` : The dictionary which contains the translations, this is called `phrases` because Polyglot.js uses this 
 *                term ; 
 *  * `type`    : An arbitrary string which defines the type of the translation dictionary, this can then be used in 
 *                the application to manage multiple dictionaries. For example we could define a specific dictionary for 
 *                sub-application or sub-modules. 
 */
var i18nElement = $('#i18n');

// Create a singleton Polyglot instance which will be used everywhere in the application
console.log('Loading public transaltions...');
var polyglot = new Polyglot(
    {
        locale : i18nElement.data('locale'),
        phrases: i18nElement.data('phrases'), 
        type : i18nElement.data('type'), 
        version : '__default__',
        urlBuilder : function(type, locale, version) {
            return config.translationsUrl + type + '/' + locale + '.json?v=' + version;
        }
    }
);
console.log('Public translations loaded.');

Translation files versionning

TODO

Caching large translation files

TODO

Using common translation files in several projects

TODO

Create JSON translation files with Gulp and Browserify

TODO

Embed translation in a DOM node with Gulp and Preprocess

TODO

Expose the t method to templates

TODO

Release history

1.0.0-alpha.4 (2016-12-03)

  • Fix a bug while calling the URL builder, the locale, type and version passed was not the right ones.

1.0.0-alpha.3 (2016-12-01)

  • Now the translations cache is only created if at least one phrase is present in the constructor.

1.0.0-alpha.2 (2016-11-30)

  • Fix bug in load(options), the function was not using options configured in the constructor ;
  • Fix undefined local variable (should be locale) in load(options).

1.0.0-alpha.1 (2015-08-23)

  • First release