UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

420 lines 15 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.defaultTranslatorFunction = exports.Streami18n = void 0; var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _dayjs = _interopRequireDefault(require("dayjs")); var _calendar = _interopRequireDefault(require("dayjs/plugin/calendar")); var _duration = _interopRequireDefault(require("dayjs/plugin/duration")); var _localeData = _interopRequireDefault(require("dayjs/plugin/localeData")); var _localizedFormat = _interopRequireDefault(require("dayjs/plugin/localizedFormat")); var _relativeTime = _interopRequireDefault(require("dayjs/plugin/relativeTime")); var _updateLocale = _interopRequireDefault(require("dayjs/plugin/updateLocale")); var _utc = _interopRequireDefault(require("dayjs/plugin/utc")); var _i18next = _interopRequireDefault(require("i18next")); var _calendarFormats = require("./calendarFormats"); var _predefinedFormatters = require("./predefinedFormatters"); var _ar = _interopRequireDefault(require("../../i18n/ar.json")); var _en = _interopRequireDefault(require("../../i18n/en.json")); var _es = _interopRequireDefault(require("../../i18n/es.json")); var _fr = _interopRequireDefault(require("../../i18n/fr.json")); var _he = _interopRequireDefault(require("../../i18n/he.json")); var _hi = _interopRequireDefault(require("../../i18n/hi.json")); var _it = _interopRequireDefault(require("../../i18n/it.json")); var _ja = _interopRequireDefault(require("../../i18n/ja.json")); var _ko = _interopRequireDefault(require("../../i18n/ko.json")); var _nl = _interopRequireDefault(require("../../i18n/nl.json")); var _ptBr = _interopRequireDefault(require("../../i18n/pt-br.json")); var _ru = _interopRequireDefault(require("../../i18n/ru.json")); var _tr = _interopRequireDefault(require("../../i18n/tr.json")); require("dayjs/locale/ar"); require("dayjs/locale/es"); require("dayjs/locale/fr"); require("dayjs/locale/he"); require("dayjs/locale/hi"); require("dayjs/locale/it"); require("dayjs/locale/ja"); require("dayjs/locale/ko"); require("dayjs/locale/nl"); require("dayjs/locale/pt-br"); require("dayjs/locale/ru"); require("dayjs/locale/tr"); require("dayjs/locale/en"); var defaultNS = 'translation'; var defaultLng = 'en'; _dayjs.default.extend(_updateLocale.default); _dayjs.default.extend(_utc.default); _dayjs.default.updateLocale('en', { calendar: _calendarFormats.calendarFormats.en, format: { L: 'DD/MM/YYYY', LL: 'D MMMM YYYY', LLL: 'D MMMM YYYY HH:mm', LLLL: 'dddd, D MMMM YYYY HH:mm', LT: 'hh:mmA', LTS: 'HH:mm:ss' } }); _dayjs.default.updateLocale('ar', { calendar: _calendarFormats.calendarFormats.ar }); _dayjs.default.updateLocale('es', { calendar: _calendarFormats.calendarFormats.es }); _dayjs.default.updateLocale('fr', { calendar: _calendarFormats.calendarFormats.fr }); _dayjs.default.updateLocale('he', { calendar: _calendarFormats.calendarFormats.he }); _dayjs.default.updateLocale('hi', { calendar: _calendarFormats.calendarFormats.hi, meridiem(hour) { if (hour < 4) { return 'रात'; } if (hour < 10) { return 'सुबह'; } if (hour < 17) { return 'दोपहर'; } if (hour < 20) { return 'शाम'; } return 'रात'; }, meridiemHour(hour, meridiem) { if (hour === 12) { hour = 0; } if (meridiem === 'रात') { return hour < 4 ? hour : hour + 12; } if (meridiem === 'सुबह') { return hour; } if (meridiem === 'दोपहर') { return hour >= 10 ? hour : hour + 12; } if (meridiem === 'शाम') { return hour + 12; } return hour; }, meridiemParse: /रात|सुबह|दोपहर|शाम/ }); _dayjs.default.updateLocale('it', { calendar: _calendarFormats.calendarFormats.it }); _dayjs.default.updateLocale('ja', { calendar: _calendarFormats.calendarFormats.ja }); _dayjs.default.updateLocale('ko', { calendar: _calendarFormats.calendarFormats.ko }); _dayjs.default.updateLocale('nl', { calendar: _calendarFormats.calendarFormats.nl }); _dayjs.default.updateLocale('pt-br', { calendar: _calendarFormats.calendarFormats['pt-br'] }); _dayjs.default.updateLocale('ru', { calendar: _calendarFormats.calendarFormats.ru }); _dayjs.default.updateLocale('tr', { calendar: _calendarFormats.calendarFormats.tr }); var en_locale = { formats: {}, months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], relativeTime: {}, weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] }; var isDayJs = dateTimeParser => dateTimeParser.extend !== undefined; var supportsTz = dateTimeParser => dateTimeParser.tz !== undefined; var defaultStreami18nOptions = { DateTimeParser: _dayjs.default, dayjsLocaleConfigForLanguage: null, debug: false, disableDateTimeTranslations: false, language: 'en', logger: msg => console.warn(msg) }; var defaultTranslatorFunction = key => key; exports.defaultTranslatorFunction = defaultTranslatorFunction; class Streami18n { i18nInstance = _i18next.default.createInstance(); Dayjs = null; initialized = false; onLanguageChangeListeners = []; onTFunctionOverrideListeners = []; t = defaultTranslatorFunction; translations = { ar: { [defaultNS]: _ar.default }, en: { [defaultNS]: _en.default }, es: { [defaultNS]: _es.default }, fr: { [defaultNS]: _fr.default }, he: { [defaultNS]: _he.default }, hi: { [defaultNS]: _hi.default }, it: { [defaultNS]: _it.default }, ja: { [defaultNS]: _ja.default }, ko: { [defaultNS]: _ko.default }, nl: { [defaultNS]: _nl.default }, 'pt-BR': { [defaultNS]: _ptBr.default }, ru: { [defaultNS]: _ru.default }, tr: { [defaultNS]: _tr.default } }; dayjsLocales = {}; formatters = _predefinedFormatters.predefinedFormatters; constructor(options = {}, i18nextConfig = {}) { var finalOptions = { ...defaultStreami18nOptions, ...options }; this.logger = finalOptions.logger; this.currentLanguage = finalOptions.language; this.DateTimeParser = finalOptions.DateTimeParser; this.timezone = finalOptions.timezone; this.formatters = { ..._predefinedFormatters.predefinedFormatters, ...(options == null ? void 0 : options.formatters) }; try { if (this.DateTimeParser && isDayJs(this.DateTimeParser)) { this.DateTimeParser.extend(_duration.default); this.DateTimeParser.extend(_localizedFormat.default); this.DateTimeParser.extend(_calendar.default); this.DateTimeParser.extend(_localeData.default); this.DateTimeParser.extend(_relativeTime.default); } } catch (error) { throw new Error(`Streami18n: Looks like you wanted to provide a Dayjs instance but something went wrong while adding plugins ${JSON.stringify(error)}`); } this.isCustomDateTimeParser = !!options.DateTimeParser; var translationsForLanguage = finalOptions.translationsForLanguage; if (translationsForLanguage) { this.translations[this.currentLanguage] = { [defaultNS]: this.translations[this.currentLanguage] && this.translations[this.currentLanguage][defaultNS] ? { ...this.translations[this.currentLanguage][defaultNS], ...translationsForLanguage } : translationsForLanguage }; } if (!this.translations[this.currentLanguage]) { this.translations[this.currentLanguage] = { [defaultNS]: {} }; } this.i18nextConfig = { debug: finalOptions.debug, fallbackLng: false, interpolation: { escapeValue: false, formatSeparator: '|' }, keySeparator: false, lng: this.currentLanguage, nsSeparator: false, parseMissingKeyHandler: key => { this.logger(`Streami18n: Missing translation for key: ${key}`); return key; }, ...i18nextConfig }; this.validateCurrentLanguage(); var dayjsLocaleConfigForLanguage = finalOptions.dayjsLocaleConfigForLanguage; if (dayjsLocaleConfigForLanguage) { this.addOrUpdateLocale(this.currentLanguage, { ...dayjsLocaleConfigForLanguage }); } else if (!this.localeExists(this.currentLanguage)) { this.logger(`Streami18n: Streami18n(...) - Locale config for ${this.currentLanguage} does not exist in momentjs.` + `Please import the locale file using "import 'moment/locale/${this.currentLanguage}';" in your app or ` + 'register the locale config with Streami18n using registerTranslation(language, translation, customDayjsLocale)'); } this.tDateTimeParser = timestamp => { var language = finalOptions.disableDateTimeTranslations || !this.localeExists(this.currentLanguage) ? defaultLng : this.currentLanguage; if (!isDayJs(this.DateTimeParser)) { return supportsTz(this.DateTimeParser) && this.timezone ? this.DateTimeParser(timestamp).tz(this.timezone).locale(language) : this.DateTimeParser(timestamp).locale(language); } return this.DateTimeParser(timestamp).locale(language); }; } init() { var _this = this; return (0, _asyncToGenerator2.default)(function* () { _this.validateCurrentLanguage(); try { _this.t = yield _this.i18nInstance.init({ ..._this.i18nextConfig, lng: _this.currentLanguage, resources: _this.translations }); if (_this.queuedTFunctionOverride) { _this.t = _this.queuedTFunctionOverride; _this.queuedTFunctionOverride = undefined; _this.onTFunctionOverrideListeners.forEach(listener => listener(_this.t)); } _this.initialized = true; if (_this.formatters) { Object.entries(_this.formatters).forEach(([name, formatterFactory]) => { var _this$i18nInstance$se; if (!formatterFactory) { return; } (_this$i18nInstance$se = _this.i18nInstance.services.formatter) == null || _this$i18nInstance$se.add(name, formatterFactory(_this)); }); } } catch (error) { _this.logger(`Something went wrong with init: ${JSON.stringify(error)}`); } _this.waitForInitializing = undefined; })(); } localeExists = language => { if (this.isCustomDateTimeParser) { return true; } return Object.keys(_dayjs.default.Ls).indexOf(language) > -1; }; validateCurrentLanguage = () => { var availableLanguages = Object.keys(this.translations); if (availableLanguages.indexOf(this.currentLanguage) === -1) { this.logger(`Streami18n: '${this.currentLanguage}' language is not registered.` + ` Please make sure to call streami18n.registerTranslation('${this.currentLanguage}', {...}) or ` + `use one the built-in supported languages - ${this.getAvailableLanguages()}`); this.currentLanguage = defaultLng; } }; geti18Instance = () => this.i18nInstance; getAvailableLanguages = () => Object.keys(this.translations); getTranslations = () => this.translations; getTranslators() { var _this2 = this; return (0, _asyncToGenerator2.default)(function* () { if (!_this2.initialized) { if (_this2.waitForInitializing) { yield _this2.waitForInitializing; } else { if (_this2.dayjsLocales[_this2.currentLanguage]) { _this2.addOrUpdateLocale(_this2.currentLanguage, _this2.dayjsLocales[_this2.currentLanguage]); } var initPromise = _this2.init(); _this2.waitForInitializing = initPromise; yield initPromise; } } return { t: _this2.t, tDateTimeParser: _this2.tDateTimeParser }; })(); } registerTranslation(language, translation, customDayjsLocale) { if (!translation) { this.logger('Streami18n: registerTranslation(language, translation, customDayjsLocale) called without translation'); return; } if (!this.translations[language]) { this.translations[language] = { [defaultNS]: translation }; } else { this.translations[language][defaultNS] = translation; } if (customDayjsLocale) { this.dayjsLocales[language] = { ...customDayjsLocale }; } else if (!this.localeExists(language)) { this.logger('Streami18n: registerTranslation(language, translation, customDayjsLocale) - ' + `Locale config for ${language} does not exist in Dayjs.` + `Please import the locale file using "import 'dayjs/locale/${language}';" in your app or ` + 'register the locale config with Streami18n using registerTranslation(language, translation, customDayjsLocale)'); } if (this.initialized) { this.i18nInstance.addResources(language, defaultNS, translation); } } addOrUpdateLocale(key, config) { if (this.localeExists(key)) { _dayjs.default.updateLocale(key, { ...config }); } else { _dayjs.default.locale({ name: key, ...en_locale, ...config }, undefined, true); } } setLanguage(language) { var _this3 = this; return (0, _asyncToGenerator2.default)(function* () { _this3.currentLanguage = language; if (!_this3.initialized) { return; } try { var t = yield _this3.i18nInstance.changeLanguage(language); if (_this3.dayjsLocales[language]) { _this3.addOrUpdateLocale(_this3.currentLanguage, _this3.dayjsLocales[_this3.currentLanguage]); } _this3.t = t; _this3.onLanguageChangeListeners.forEach(listener => listener(t)); return t; } catch (error) { _this3.logger(`Failed to set language: ${JSON.stringify(error)}`); return _this3.t; } })(); } addOnLanguageChangeListener(callback) { this.onLanguageChangeListeners.push(callback); return { unsubscribe: () => { this.onLanguageChangeListeners = this.onLanguageChangeListeners.filter(listener => listener !== callback); } }; } addOnTFunctionOverrideListener(callback) { this.onTFunctionOverrideListeners.push(callback); return { unsubscribe: () => { this.onTFunctionOverrideListeners = this.onTFunctionOverrideListeners.filter(listener => listener !== callback); } }; } overrideTFunction(tFunction) { if (!this.initialized) { this.queuedTFunctionOverride = tFunction; } else { this.t = tFunction; this.onTFunctionOverrideListeners.forEach(listener => listener(tFunction)); } } } exports.Streami18n = Streami18n; //# sourceMappingURL=Streami18n.js.map