lareact-i18n
Version:
Allows to connect your `Laravel` Framework localization files with `React`.
39 lines (38 loc) • 1.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = resolver;
const recognizer_1 = __importDefault(require("../utils/recognizer"));
/**
* Resolves the language files for a given locale.
*
* @param files - The available translation files.
* @param locale - The target locale.
*/
function resolver(files, locale) {
const { isJsonLocale, isPhpLocale, getJsonFiles, getPhpFiles } = (0, recognizer_1.default)(files);
const jsonFiles = isJsonLocale(locale) ? getJsonFiles(locale).map((file) => files[file]) : [];
const phpFiles = isPhpLocale(locale) ? getPhpFiles(locale).map((file) => files[file]) : [];
const getType = (obj) => Object.prototype.toString.call(obj);
const mergeObjects = (fileList) => {
return fileList.reduce((acc, file) => {
if (getType(file) === '[object Object]') {
return Object.assign(Object.assign({}, acc), file);
}
if (getType(file) === '[object Function]') {
return Object.assign(Object.assign({}, acc), file());
}
return acc;
}, {});
};
const mergedJson = mergeObjects(jsonFiles);
const mergedPhp = mergeObjects(phpFiles);
const asyncJson = jsonFiles.find((file) => ['[object Promise]', '[object Module]'].includes(getType(file)));
const asyncPhp = phpFiles.find((file) => ['[object Promise]', '[object Module]'].includes(getType(file)));
if (asyncJson || asyncPhp) {
return [asyncJson ? asyncJson : { default: mergedJson }, asyncPhp ? asyncPhp : { default: mergedPhp }];
}
return [{ default: mergedJson }, { default: mergedPhp }];
}