stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
447 lines • 16.3 kB
JavaScript
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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
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;
var Streami18n = exports.Streami18n = function () {
function Streami18n(options = {}, i18nextConfig = {}) {
(0, _classCallCheck2.default)(this, Streami18n);
this.i18nInstance = _i18next.default.createInstance();
this.Dayjs = null;
this.initialized = false;
this.onLanguageChangeListeners = [];
this.onTFunctionOverrideListeners = [];
this.t = defaultTranslatorFunction;
this.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
}
};
this.dayjsLocales = {};
this.formatters = _predefinedFormatters.predefinedFormatters;
this.localeExists = language => {
if (this.isCustomDateTimeParser) {
return true;
}
return Object.keys(_dayjs.default.Ls).indexOf(language) > -1;
};
this.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;
}
};
this.geti18Instance = () => this.i18nInstance;
this.getAvailableLanguages = () => Object.keys(this.translations);
this.getTranslations = () => this.translations;
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?.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);
};
}
return (0, _createClass2.default)(Streami18n, [{
key: "init",
value: (function () {
var _init = (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]) => {
if (!formatterFactory) {
return;
}
this.i18nInstance.services.formatter?.add(name, formatterFactory(this));
});
}
} catch (error) {
this.logger(`Something went wrong with init: ${JSON.stringify(error)}`);
}
this.waitForInitializing = undefined;
});
function init() {
return _init.apply(this, arguments);
}
return init;
}())
}, {
key: "getTranslators",
value: (function () {
var _getTranslators = (0, _asyncToGenerator2.default)(function* () {
if (!this.initialized) {
if (this.waitForInitializing) {
yield this.waitForInitializing;
} else {
if (this.dayjsLocales[this.currentLanguage]) {
this.addOrUpdateLocale(this.currentLanguage, this.dayjsLocales[this.currentLanguage]);
}
var initPromise = this.init();
this.waitForInitializing = initPromise;
yield initPromise;
}
}
return {
t: this.t,
tDateTimeParser: this.tDateTimeParser
};
});
function getTranslators() {
return _getTranslators.apply(this, arguments);
}
return getTranslators;
}())
}, {
key: "registerTranslation",
value: function 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);
}
}
}, {
key: "addOrUpdateLocale",
value: function addOrUpdateLocale(key, config) {
if (this.localeExists(key)) {
_dayjs.default.updateLocale(key, {
...config
});
} else {
_dayjs.default.locale({
name: key,
...en_locale,
...config
}, undefined, true);
}
}
}, {
key: "setLanguage",
value: (function () {
var _setLanguage = (0, _asyncToGenerator2.default)(function* (language) {
this.currentLanguage = language;
if (!this.initialized) {
return;
}
try {
var t = yield this.i18nInstance.changeLanguage(language);
if (this.dayjsLocales[language]) {
this.addOrUpdateLocale(this.currentLanguage, this.dayjsLocales[this.currentLanguage]);
}
this.t = t;
this.onLanguageChangeListeners.forEach(listener => listener(t));
return t;
} catch (error) {
this.logger(`Failed to set language: ${JSON.stringify(error)}`);
return this.t;
}
});
function setLanguage(_x) {
return _setLanguage.apply(this, arguments);
}
return setLanguage;
}())
}, {
key: "addOnLanguageChangeListener",
value: function addOnLanguageChangeListener(callback) {
this.onLanguageChangeListeners.push(callback);
return {
unsubscribe: () => {
this.onLanguageChangeListeners = this.onLanguageChangeListeners.filter(listener => listener !== callback);
}
};
}
}, {
key: "addOnTFunctionOverrideListener",
value: function addOnTFunctionOverrideListener(callback) {
this.onTFunctionOverrideListeners.push(callback);
return {
unsubscribe: () => {
this.onTFunctionOverrideListeners = this.onTFunctionOverrideListeners.filter(listener => listener !== callback);
}
};
}
}, {
key: "overrideTFunction",
value: function overrideTFunction(tFunction) {
if (!this.initialized) {
this.queuedTFunctionOverride = tFunction;
} else {
this.t = tFunction;
this.onTFunctionOverrideListeners.forEach(listener => listener(tFunction));
}
}
}]);
}();
//# sourceMappingURL=Streami18n.js.map