1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * String supplant
- * By Douglas Crockford
- * http://javascript.crockford.com/remedial.html
- */
- if (!String.prototype.supplant) {
- String.prototype.supplant = function (o) {
- return this.replace(/{([^{}]*)}/g,
- function (a, b) {
- var r = o[b];
- return typeof r === 'string' || typeof r === 'number' ? r : a;
- }
- );
- };
- }
- var babel = (function (window, document) {
- var config = {
- lang: "en",
- dir: "lang",
- extension: "json"
- };
- var next;
- var loaded = {};
- var loadLanguage = function(lang) {
- var xhr = new XMLHttpRequest();
- xhr.open("GET", config.dir + "/" + lang + "." + config.extension, true);
- xhr.addEventListener("load", function(e) {
- loaded[lang] = JSON.parse(xhr.responseText);
-
- if (next == lang) {
- replace(lang);
- }
- }, false);
- xhr.addEventListener("error", function(e) {
- loaded[lang] = {};
- }, false);
- xhr.send();
- };
-
- var replace = function(lang) {
- Object.keys(loaded[lang]).forEach(function (key) {
- var node = document.getElementById(key);
- if (node) {
- node.innerHTML = loaded[lang][key].supplant(loaded[lang]);
- }
- });
- };
-
- var babel = {
- config : function(options) {
- Object.keys(options).forEach(function (key) {
- config[key] = options[key];
- });
- },
-
- activate: function(lang) {
- if (!loaded[lang]) {
- loadLanguage(lang);
- next = lang;
- } else {
- replace(lang);
- }
- }
- };
-
- // bootstrap
- document.addEventListener("DOMContentLoaded", function (e) {
- babel.activate(config.lang);
- });
-
- return babel;
-
- })(window, document);
|