react-tiny-i18n
Version:
A tiny (~500B) i18n implementation for handling translations in React
3 lines (2 loc) • 1.34 kB
JavaScript
;var e,t=require("react"),n=(e=t)&&"object"==typeof e&&"default"in e?e.default:e,r=t.createContext({}),a=r.Provider,u={};function c(e){var n,a=e.children,c=e.replacements,o=void 0===c?{}:c,g=t.useContext(r).currentLanguage,l=a+"."+Object.values(o).join(".");return l in u?u[l]:(n="string"==typeof g?g:function(e,t,n){void 0===n&&(n=a);for(var r=a.split("."),u=0,c=r.length,o=e;null!=o&&u<c;)o=o[r[u++]];return u&&u==c?o:n}(g,0,a),o&&(n=function(e,t){var r=n;return Object.keys(t).forEach(function(e){r=r.replace(new RegExp("{{"+e+"}}","gm"),t[e])}),r}(0,o)),n!==a&&(u[l]=n),n)}exports.Languages=function(e){var r=e.children,u=e.languages,c=t.useState(e.defaultLanguage),o=c[0],g={languages:u,currentLanguageKey:o,currentLanguage:"object"==typeof u?u[o]:u,setCurrentLanguage:c[1],availableLanguages:Object.keys(u)};return n.createElement(a,{value:g},r)},exports.Switcher=function(e){var a=t.useContext(r),u=a.setCurrentLanguage,c=a.availableLanguages;return n.createElement("select",Object.assign({onChange:function(e){u(e.currentTarget.value)},value:a.currentLanguageKey},e),c.map(function(e){return n.createElement("option",{key:e,value:e},e)}))},exports.T=c,exports.Translator=c,exports.t=function(e,t){return void 0===t&&(t={}),c({children:e,replacements:t})};
//# sourceMappingURL=react-tiny-i18n.cjs.production.min.js.map