frenchkiss
Version:
The blazing fast lightweight translation module for javascript
7 lines (6 loc) • 2.55 kB
JavaScript
/**
* @license frenchkiss 0.3.0
* Copyright (c) 2018-2022 Koala Interactive, Inc.
* License: MIT
*/
;var n=/^\s*\w+\s*$/,t=/^\s*(\w+)\s*,\s*(select|plural)\s*,/i,e=JSON.stringify,r=function(n){return'(p["'+n+'"]||(p["'+n+'"]=="0"?0:"'+n+'" in p?"":v("'+n+'",k,l)))'};function u(n){for(var t={},u=function n(t,u){var o=[];var i=t.length;for(var f=0;f<i;++f){var c=t[f],s=c[0],a=c[1],l="";if(0===s&&a)l=e(a);else if(1===s)l=r(a.trim());else if(2===s){for(var v=c[2],p=c[3],h=c[4],g=p.length,b=0;b<g;++b)h?"="===p[b][0][0]?l+='p["'+v+'"]=='+e(p[b][0].substr(1)):(u[v]=1,l+='m["'+v+'"]=='+e(p[b][0])):l+='p["'+v+'"]=='+e(p[b][0]),l+="?"+n(p[b][1],u)+":";l="("+l+n(a,u)+")"}l&&o.push(l)}return o.join("+")||'""'}(o(n),t),i=Object.keys(t),f=i.length,c=[],s=0;s<f;++s)c[s]=i[s]+':f(p["'+i[s]+'"])';return Function("a","f","k","l","v","var p=a||{}"+(f?",m=f?{"+c+"}:{}":"")+";return "+u)}function o(e){for(var r=0,u="",o=e.length,i=[],f=0;f<o;++f){var s=e[f],a=void 0;"{"===s?r++||(a=[0,u]):"}"===s&&(--r||(a=n.test(u)?[1,u]:t.test(u)?c(u):[0,u])),a?(i.push(a),u=""):u+=s}return i.push([0,u]),i}function i(n,t,e,r){return n.slice(0,e)+t+n.slice(r)}function f(n,t){for(var e=-1;-1!==(e=n.indexOf("#",e+1));)"'"===n[e-1]&&"'"===n[e+1]?n=i(n,"#",e-1,e+2):(n=i(n,"{"+t+"}",e,e+1),e+=t.length+2);return n}function c(n){for(var e=n.match(t),r=e[1],u="p"===e[2][0].toLowerCase(),i=o(n.replace(t,"")),c=i.length,s=[],a=[0,""],l=0;l<c-1;){var v=i[l++][1].trim(),p=i[l++][1];u&&(p=f(p,r));var h=o(p);"other"===v?a=h:u&&"="===v[0]?s.unshift([v,h]):s.push([v,h])}return[2,a,r,s,u]}var s={},a={},l={},v="",p="",h=function(n){return n},g=function(){return""},b=function(n,t){return s[t]&&s[t][n]||a[t]&&"string"==typeof a[t][n]&&(s[t][n]=u(a[t][n]))},d=function n(t,e,r){for(var u=Object.keys(e),o=u.length,i=0;i<o;++i){var f=u[i],c=r+f;"object"==typeof e[f]?(n(t,e[f],c+"."),delete t[f]):t[c]=e[f]+""}},y=function n(t,e,r,u){for(var o=Object.keys(r),i=o.length,f=0;f<i;++f){var c=o[f],s=u+c;"object"==typeof r[c]?n(t,e,r[c],s+"."):t[s]!==r[c]&&(delete e[s],t[s]=r[c]+"")}},j={cache:s,store:a,t:function(n,t,e){var r,u=e||v;return u&&(r=b(n,u))?r(t,l[u],n,u,g):(u=p)&&(r=b(n,u))?r(t,l[u],n,u,g):h(n,t,e||v)},onMissingKey:function(n){h=n},onMissingVariable:function(n){g=n},locale:function(n){return n&&(v=n),v},fallback:function(n){return n&&(p=n),p},set:function(n,t){d(t,t,""),s[n]={},a[n]=t},unset:function(n){delete s[n],delete a[n]},extend:function(n,t){a[n]||(a[n]={}),s[n]||(s[n]={}),y(a[n],s[n],t,"")},plural:function(n,t){l[n]=t}};module.exports=j;