Manage localized sets of content files (be they property/json/etc) which may require rendering with data models
JavaScript
Clone or download
Pull request Compare This branch is 34 commits behind krakenjs:v1.x.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
bundler
lib
test
.eslintrc
.gitignore
.jshintignore
.jshintrc
.travis.yml
CONTRIBUTING.md
LICENSE.txt
README.md
SECURITY.md
index.js
package.json

README.md

bundalo

Lead Maintainer: Aria Stewart

Extract/cache/render property files/strings using i18n rules and various rendering engines

Build Status

Use cases

Initialize bundalo

Call bundalo module with a key that matches your template engine, plus locale information. Currently only dust and none are supported as engines.

var bundalo = require('bundalo');

//couple of configs for later
var config = {
	"contentPath": "locales/", //required
	"fallback": "en-US",       //optional
	"engine": "dust",          //required
	"cache": false             //optional, default is true
};
var config2 = {
	"contentPath": "globals/",
	"fallback": "",
	"engine": "none"
};

//create two bundalo instances. Each has its own cache
var bundle = bundalo(config);
var bundle2 = bundalo(config);

Use bundalo

User wants key/values from some bundle file, corrected for locality, and possibly rendered with some data model

bundle.get({'bundle': 'errors/server','locality': 'en-US', 'model': {'name': 'Will Robinson'}}, function bundaloReturn(err, data) {
	console.log("what'd we get from bundalo.get?", data, err);
	cb({
		'err': data.error
	});
});

User wants multiple bundles in a single call, to avoid calling bundalo multiple times

bundle.get({'bundle': ['errors/server', 'errors/client'], 'locality': 'en-US',  'model': {'name': 'Will Robinson'}}, function bundaloReturn(err, data) {
	console.log("what'd we get from bundalo.get?", data, err);
	cb({
		'clienterr': data['errors/client'].error,
		'servererr': data['errors/server'].error
	});
});

User wants multiple bundles in a single call, and wants to alias the bundles for easier management upon return

bundle.get('bundle': {
	'server': 'errors/server',
	'client': 'errors/client'
}, 'locality': 'en-US', 'model': {'name': 'Will Robinson'}}, function bundaloReturn(err, data) {
	console.log("what'd we get from bundalo.get?", data, err);
	cb({
		'clienterr': data.client.error,
		'servererr': data.server.error
	});
});

Design

When a user first requests a bundle, bundalo will:

  • fetch the correct file from the file system based on locality
  • [dust only] compile the properties file into a dust template
  • cache the [compiled dust] template
  • [dust only] render the template with any provided data model
  • deserialize the rendered properties file via spud
  • return a JSON data object with the rendered values

Upon subsequent requests for a bundle, the previously cached compiled template will be re-rendered and returned. Cache will be based upon the bundle path provided by the user, plus the locality path information. I.e. 'US/en/foo/bar' is a separate cached object from 'DE/de/foo/bar'. Cache is consistent per bundalo instance created.