UNPKG

ilib

Version:

iLib is a cross-engine library of internationalization (i18n) classes written in pure JS

1 lines 4.58 kB
var ilib=require("./ilib.js"),Locale=require("./Locale.js"),JSUtils=require("./JSUtils.js"),Path=require("./Path.js"),ISet=require("./ISet.js"),Utils={};function getPropertyName(basename,pathname,root){basename=[basename];return root&&(basename=basename.concat(root.split("/"))),(basename=pathname?basename.concat(pathname.split("/")):basename).join("_")}function getPropertyNameFromFile(basename,filepath,root){filepath=Path.dirname(filepath);return getPropertyName(basename,"."===filepath||"/"===filepath||".."===filepath?void 0:filepath,root)}function dataNotExists(basename,pathname,root){return!ilib.data[getPropertyNameFromFile(basename,pathname,root)]}Utils.getSublocales=function(locale){var ret=["root"],locale="string"==typeof locale?new Locale(locale):locale,lang=locale.getLanguage(),region=locale.getRegion(),script=locale.getScript(),locale=locale.getVariant();return lang&&ret.push(lang),region&&ret.push("und-"+region),lang&&(script&&ret.push(lang+"-"+script),region&&ret.push(lang+"-"+region),locale)&&ret.push(lang+"-"+locale),region&&locale&&ret.push("und-"+region+"-"+locale),lang&&(script&&region&&ret.push(lang+"-"+script+"-"+region),script&&locale&&ret.push(lang+"-"+script+"-"+locale),region&&locale&&ret.push(lang+"-"+region+"-"+locale),script)&&region&&locale&&ret.push(lang+"-"+script+"-"+region+"-"+locale),ret},Utils.mergeLocData=function(prefix,locale,replaceArrays,returnOne,root){var data=void 0,locale=locale||new Locale(),mostSpecific=data={};return Utils.getSublocales(locale).forEach(function(l){l=getPropertyName(prefix,"root"===l?void 0:l.replace(/-/g,"/"),root);ilib.data[l]&&(returnOne?mostSpecific=ilib.data[l]:data=JSUtils.merge(data,ilib.data[l],replaceArrays))}),returnOne?mostSpecific:data},Utils.getLocFiles=function(locale,name){var filename=name||"resources.json",name=locale||new Locale();return Utils.getSublocales(name).map(function(l){return"root"===l?filename:Path.join(l.replace(/-/g,"/"),filename)})},Utils._callLoadData=function(files,sync,params,root,callback){return"function"==typeof ilib._load?ilib._load(files,sync,params,callback):"object"==typeof ilib._load&&"function"==typeof ilib._load.loadFiles?ilib._load.loadFiles(files,sync,params,callback,root):void 0},Utils.loadData=function(params){var root,name="resources.json",locale=new Locale(ilib.getLocale()),sync=!1,type=void 0,loadParams={},callback=void 0,nonlocale=!1,replace=!1;if(!params||"function"!=typeof params.callback)throw"Utils.loadData called without a callback. It must have a callback to work.";params.name&&(name=params.name),params.locale&&(locale="string"==typeof params.locale?new Locale(params.locale):params.locale),params.type&&(type=params.type),params.loadParams&&(loadParams=params.loadParams),params.sync&&(sync=params.sync),params.nonlocale&&(nonlocale=!!params.nonlocale),"boolean"==typeof params.replace&&(replace=params.replace),root=params.root,callback=params.callback,type||(type=-1!==(params=name.lastIndexOf("."))?name.substring(params+1):"text"),void 0===ilib.data.cache&&(ilib.data.cache={}),void 0===ilib.data.cache.fileSet&&(ilib.data.cache.fileSet=new ISet);var data,returnOne=loadParams&&loadParams.returnOne||"json"!==type,basename=name.substring(0,name.lastIndexOf(".")).replace(/[\.:\(\)\/\\\+\-]/g,"_");if(ilib._cacheMerged){void 0===ilib.data.cache.merged&&(ilib.data.cache.merged={});var spec=(!nonlocale&&locale.getSpec().replace(/-/g,"_")||"root")+","+basename+","+String(JSUtils.hashCode(loadParams));if(void 0!==ilib.data.cache.merged[spec])return void callback(ilib.data.cache.merged[spec])}if(void 0!==ilib._load){var files=nonlocale?[name||"resources.json"]:Utils.getLocFiles(locale,name),isPath=ilib._load.isMultiPaths;if((files=void 0!==isPath&&!1!==isPath?files:files.filter(ilib.bind(this,function(file){return!ilib.data.cache.fileSet.has(Path.join(root,file))&&dataNotExists(basename,file,root)}))).length)return void Utils._callLoadData(files,sync,loadParams,root,ilib.bind(this,function(arr){for(var property,i=0;i<files.length;i++)arr[i]&&(property=nonlocale?basename:getPropertyNameFromFile(basename,files[i],root),!isPath&&ilib.data[property]||(ilib.data[property]=arr[i])),ilib.data.cache.fileSet.add(Path.join(root,files[i]));nonlocale?data=ilib.data[basename]:(data=Utils.mergeLocData(basename,locale,replace,returnOne,root),ilib._cacheMerged&&(ilib.data.cache.merged[spec]=data)),callback(data)}))}nonlocale?data=ilib.data[basename]:(data=Utils.mergeLocData(basename,locale,replace,returnOne,root),ilib._cacheMerged&&(ilib.data.cache.merged[spec]=data)),callback(data)},module.exports=Utils;