"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var node_polyglot_1 = __importDefault(require("node-polyglot")); /** * Build a polyglot-based i18nProvider based on a function returning the messages for a locale * * @example * * import { Admin, Resource, polyglotI18nProvider } from 'react-admin'; * import englishMessages from 'ra-language-english'; * import frenchMessages from 'ra-language-french'; * * const messages = { * fr: frenchMessages, * en: englishMessages, * }; * const i18nProvider = polyglotI18nProvider(locale => messages[locale]) */ exports.default = (function (getMessages, initialLocale, polyglotOptions) { if (initialLocale === void 0) { initialLocale = 'en'; } if (polyglotOptions === void 0) { polyglotOptions = {}; } var locale = initialLocale; var messages = getMessages(initialLocale); if (messages instanceof Promise) { throw new Error("The i18nProvider returned a Promise for the messages of the default locale (" + initialLocale + "). Please update your i18nProvider to return the messages of the default locale in a synchronous way."); } var polyglot = new node_polyglot_1.default(__assign({ locale: locale, phrases: __assign({ '': '' }, messages) }, polyglotOptions)); var translate = polyglot.t.bind(polyglot); return { translate: function (key, options) { if (options === void 0) { options = {}; } return translate(key, options); }, changeLocale: function (newLocale) { return new Promise(function (resolve) { // so we systematically return a Promise for the messages // i18nProvider may return a Promise for language changes, return resolve(getMessages(newLocale)); }).then(function (messages) { locale = newLocale; var newPolyglot = new node_polyglot_1.default(__assign({ locale: newLocale, phrases: __assign({ '': '' }, messages) }, polyglotOptions)); translate = newPolyglot.t.bind(newPolyglot); }); }, getLocale: function () { return locale; }, }; });