bazinga-translator
Version:
A pretty nice way to use your translation messages generated by the BazingaJsTranslationBundle in your JavaScript.
5 lines • 5.07 kB
JavaScript
/**
* @author William DURAND <william.durand1@gmail.com>
* @license MIT Licensed
*/
!function(e,a){"object"==typeof module&&module.exports?module.exports=a(require("intl-messageformat")):"function"==typeof define&&define.amd?define(["intl-messageformat"],a):e.Translator=a(e.IntlMessageFormat)}("undefined"!=typeof self?self:this,function(e){"use strict";function a(e,a){var s,n=g.placeHolderPrefix,r=g.placeHolderSuffix;for(s in a){var t=new RegExp(n+s+r,"g");if(t.test(e)){var c=String(a[s]).replace(new RegExp("\\$","g"),"$$$$");e=e.replace(t,c)}}return e}function s(e,a,s,r,t,c){var i=s||r||t,l=a,u=c||{},d=i.split("_")[0];if(u.isICU=!1,!(i in o))if(d in o)i=d;else{if(!(t in o))return e;i=t}if(void 0===l||null===l)for(var h=0;h<f.length;h++)if(n(i,f[h],e)||n(d,f[h],e)||n(t,f[h],e)){l=f[h].replace(p,"");break}if(n(i,l+p,e))return u.isICU=!0,o[i][l+p][e];if(n(i,l,e))return o[i][l][e];for(var m,g,v,b;i.length>2&&(m=i.length,g=i.split(/[\s_]+/),v=g[g.length-1],b=v.length,1!==g.length);)if(i=i.substring(0,m-(b+1)),n(i,l,e))return o[i][l][e];return n(t,l,e)?o[t][l][e]:e}function n(e,a,s){return e in o&&(a in o[e]&&s in o[e][a])}function r(e,a,s){var n,r,i=[],l=[],o=e.split(g.pluralSeparator),u=[];for(n=0;n<o.length;n++){var f=o[n];h.test(f)?(u=f.match(h),i[u[0]]=u[u.length-1]):d.test(f)?(u=f.match(d),l.push(u[1])):l.push(f)}for(r in i)if(m.test(r))if(u=r.match(m),u[1]){var p,v=u[2].split(",");for(p in v)if(a==v[p])return i[r]}else{var b=t(u[4]),I=t(u[5]);if(("["===u[3]?a>=b:a>b)&&("]"===u[6]?a<=I:a<I))return i[r]}return l[c(a,s)]||l[0]||void 0}function t(e){return"-Inf"===e?Number.NEGATIVE_INFINITY:"+Inf"===e||"Inf"===e?Number.POSITIVE_INFINITY:parseInt(e,10)}function c(e,a){var s=a;switch("pt_BR"===s&&(s="xbr"),s.length>3&&(s=s.split("_")[0]),s){case"bo":case"dz":case"id":case"ja":case"jv":case"ka":case"km":case"kn":case"ko":case"ms":case"th":case"tr":case"vi":case"zh":return 0;case"af":case"az":case"bn":case"bg":case"ca":case"da":case"de":case"el":case"en":case"eo":case"es":case"et":case"eu":case"fa":case"fi":case"fo":case"fur":case"fy":case"gl":case"gu":case"ha":case"he":case"hu":case"is":case"it":case"ku":case"lb":case"ml":case"mn":case"mr":case"nah":case"nb":case"ne":case"nl":case"nn":case"no":case"om":case"or":case"pa":case"pap":case"ps":case"pt":case"so":case"sq":case"sv":case"sw":case"ta":case"te":case"tk":case"ur":case"zu":return 1==e?0:1;case"am":case"bh":case"fil":case"fr":case"gun":case"hi":case"ln":case"mg":case"nso":case"xbr":case"ti":case"wa":return 0===e||1==e?0:1;case"be":case"bs":case"hr":case"ru":case"sr":case"uk":return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2;case"cs":case"sk":return 1==e?0:e>=2&&e<=4?1:2;case"ga":return 1==e?0:2==e?1:2;case"lt":return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2;case"sl":return e%100==1?0:e%100==2?1:e%100==3||e%100==4?2:3;case"mk":return e%10==1?0:1;case"mt":return 1==e?0:0===e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3;case"lv":return 0===e?0:e%10==1&&e%100!=11?1:2;case"pl":return 1==e?0:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?1:2;case"cy":return 1==e?0:2==e?1:8==e||11==e?2:3;case"ro":return 1==e?0:0===e||e%100>0&&e%100<20?1:2;case"ar":return 0===e?0:1==e?1:2==e?2:e>=3&&e<=10?3:e>=11&&e<=99?4:5;default:return 0}}function i(e,a){for(var s=0;s<e.length;s++)if(a===e[s])return!0;return!1}function l(){return"undefined"!=typeof document?document.documentElement.lang.replace("-","_"):u}var o={},u="en",f=[],d=new RegExp(/^\w+\: +(.+)$/),h=new RegExp(/^\s*((\{\s*(\-?\d+[\s*,\s*\-?\d+]*)\s*\})|([\[\]])\s*(-Inf|\-?\d+)\s*,\s*(\+?Inf|\-?\d+)\s*([\[\]]))\s?(.+?)$/),m=new RegExp(/^\s*(\{\s*(\-?\d+[\s*,\s*\-?\d+]*)\s*\})|([\[\]])\s*(-Inf|\-?\d+)\s*,\s*(\+?Inf|\-?\d+)\s*([\[\]])/),p="+intl-icu",g={locale:l(),fallback:u,placeHolderPrefix:"%",placeHolderSuffix:"%",defaultDomain:"messages",pluralSeparator:"|",add:function(e,a,s,n){var r=n||this.locale||this.fallback,t=s||this.defaultDomain;return o[r]||(o[r]={}),o[r][t]||(o[r][t]={}),o[r][t][e]=a,!1===i(f,t)&&f.push(t),this},trans:function(n,r,t,c){var i={},l=s(n,t,c,this.locale,this.fallback,i);if(i.isICU){if(void 0===e)throw new Error('The dependency "IntlMessageFormat" is required to use ICU MessageFormat but it has not been found. Please read https://github.com/willdurand/BazingaJsTranslationBundle/blob/master/Resources/doc/index.md#using-icu-messageformat');return new e.IntlMessageFormat(l,void 0,void 0,{ignoreTag:!0}).format(r||{})}return a(l,r||{})},transChoice:function(e,n,t,c,i){var l=s(e,c,i,this.locale,this.fallback),o=parseInt(n,10);return t=t||{},void 0===t.count&&(t.count=n),void 0===l||isNaN(o)||(l=r(l,o,i||this.locale||this.fallback)),a(l,t)},fromJSON:function(e){if("string"==typeof e&&(e=JSON.parse(e)),e.locale&&(this.locale=e.locale),e.fallback&&(this.fallback=e.fallback),e.defaultDomain&&(this.defaultDomain=e.defaultDomain),e.translations)for(var a in e.translations)for(var s in e.translations[a])for(var n in e.translations[a][s])this.add(n,e.translations[a][s][n],s,a);return this},reset:function(){o={},f=[],this.locale=l()}};return g});