UNPKG

ilib

Version:

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

1 lines 3.33 kB
var ilib=require("./ilib.js");var Utils=require("./Utils.js");var Locale=require("./Locale.js");var IString=require("./IString.js");var Name=require("./Name.js");var CType=require("./CType.js");var isPunct=require("./isPunct.js");var NameFmt=function(e){var i=true;this.style="short";this.loadParams={};if(e){if(e.locale){this.locale=typeof e.locale==="string"?new Locale(e.locale):e.locale}if(e.style){this.style=e.style}if(e.components){this.components=e.components}if(typeof e.sync!=="undefined"){i=e.sync==true}if(typeof e.loadParams!=="undefined"){this.loadParams=e.loadParams}}this.defaultEuroTemplate=new IString("{prefix} {givenName} {middleName} {familyName}{suffix}");this.defaultAsianTemplate=new IString("{prefix}{familyName}{givenName}{middleName}{suffix}");this.useFirstFamilyName=false;switch(this.style){default:case"s":case"short":this.style="short";break;case"m":case"medium":this.style="medium";break;case"l":case"long":this.style="long";break;case"f":case"full":this.style="full";break}if(!Name.cache){Name.cache={}}this.locale=this.locale||new Locale;isPunct._init(i,this.loadParams,ilib.bind(this,function(){Utils.loadData({object:Name,locale:this.locale,name:"name.json",sync:i,loadParams:this.loadParams,callback:ilib.bind(this,function(i){if(!i){i=Name.defaultInfo;var s=this.locale.getSpec().replace(/-/g,"_");Name.cache[s]=i}this.info=i;this._init();if(e&&typeof e.onLoad==="function"){e.onLoad(this)}})})}))};NameFmt.prototype={_init:function(){if(this.components){var e={p:1,g:1,m:1,f:1,s:1},i=this.components.split("");this.comps={};for(var s=0;s<i.length;s++){if(e[i[s].toLowerCase()]){this.comps[i[s].toLowerCase()]=true}}}else{this.comps=this.info.components[this.style]}this.template=new IString(this.info.format);if(this.locale.language==="es"&&(this.style!=="long"&&this.style!=="full")){this.useFirstFamilyName=true}this.isAsianLocale=this.info.nameStyle==="asian"},_adjoinAuxillaries:function(e,i){var s,a,t,l,o;if(this.info.auxillaries&&(e.length>2||i)){for(s=0;s<e.length-1;s++){for(a=e.length;a>s;a--){t=e.slice(s,a);l=t.join(" ");o=l.toLowerCase();o=o.replace(/[,\.]/g,"");if(o in this.info.auxillaries){e.splice(s,a+1-s,t.concat(e[a]));a=s}}}}return e},getLocale:function(){return this.locale},getStyle:function(){return this.style},getComponents:function(){return this.components},format:function(e){var i,s,a,t;var l=this.locale.getLanguage();if(!e||typeof e!=="object"){return undefined}if(typeof e.isAsianName==="boolean"&&!e.isAsianName||Name._isEuroName([e.givenName,e.middleName,e.familyName].join(""),l)){t=false;a=e.clone();if(a.suffix&&isPunct(a.suffix.charAt(0))===false){a.suffix=" "+a.suffix}if(this.useFirstFamilyName&&e.familyName){var o=a.familyName.trim().split(" ");if(o.length>1){o=this._adjoinAuxillaries(o,e.prefix)}a.familyName=o[0]}a._joinNameArrays()}else{t=true;a=e;if(a.suffix&&l==="ko"&&this.info.honorifics.indexOf(e.suffix)==-1){a.suffix=" "+a.suffix}}if(!this.template||t!==this.isAsianLocale){s=t?this.defaultAsianTemplate:this.defaultEuroTemplate}else{s=this.template}var n={prefix:this.comps["p"]&&a.prefix||"",givenName:this.comps["g"]&&a.givenName||"",middleName:this.comps["m"]&&a.middleName||"",familyName:this.comps["f"]&&a.familyName||"",suffix:this.comps["s"]&&a.suffix||""};i=s.format(n);return i.replace(/\s+/g," ").trim()}};module.exports=NameFmt;