intl-hmessage
Version:
international javascript tool
2 lines (1 loc) • 1.89 kB
JavaScript
"use strict";function t(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}Object.defineProperty(exports,"__esModule",{value:!0});var e=t(require("intl-messageformat"));class n{_currentLang=null;_default=null;_updateMeta=()=>null;static plugin={getCurrentLang:()=>null,listen:()=>null};static use(t){n.plugin=t}constructor(t){this._default=t,n.plugin.listen(n.plugin.getCurrentLang),this.updateLang(n.plugin.getCurrentLang())}updateLang(t){this._currentLang=t,document.documentElement.setAttribute("lang",t),this._updateMeta()}getLang(){return this._currentLang||this._default}setUpdateMeta(t){this._updateMeta=t}}const a={getCurrentLang:()=>navigator.language,listen(t){window.onlanguagechange=()=>{t(a.getCurrentLang())}}};exports.DefaultPlugin=a,exports.Lang=n,exports.Message=class{_metas={};_currentMeta={};_lang=null;_createElement=null;constructor(t,e,n){this._metas=t.metas,this._lang=e,this._lang.setUpdateMeta(this.updateMeta),this._createElement=n,this.updateMeta()}updateMeta(){const t=this._lang.getLang();if(document.documentElement.setAttribute("lang",t),this._currentMeta=this._metas[t],(null===this._currentMeta||void 0===this._currentMeta)&&t.includes("-")){const e=t.split("-")[0];this._currentMeta=this._metas[e]}}get(t,n){var a;let r=null===(a=this._currentMeta)||void 0===a?void 0:a[t];if(null==r)return console.warn(`Can not find the translate by ${t}, current language is ${this._lang.getLang()}`),"";if(n)try{return r=new e.default(r,this._lang.getLang()).format(n),r}catch(t){return console.warn("Format the translate failed",t),""}return r}getHtml(t,e){const n=this.get(t,e);if(n){if("function"!=typeof this._createElement)return void console.warn("Please set createElement parameter by constructor and it must be a function");const t=this._createElement("span",{dangerouslySetInnerHTML:{__html:n}}),e=()=>t;return{defaultMessage:e,d:e,...t}}return n}};