laravel-i18n-react
Version:
A Vite plugin to load Laravel localization files and provide them to React applications.
74 lines (73 loc) • 2.53 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = parser;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const php_array_reader_1 = require("php-array-reader");
const helper_1 = require("./helper");
/**
*
* Parse array of PHP file.
*
* @param dirname
*/
function parser(dirname) {
const sanitizedDirname = (0, helper_1.dirnameSanitize)(dirname);
if (!fs_1.default.existsSync(sanitizedDirname)) {
return [];
}
return fs_1.default
.readdirSync(sanitizedDirname)
.filter((locale) => fs_1.default.statSync(path_1.default.join(sanitizedDirname, locale)).isDirectory())
.sort()
.map((locale) => {
const translations = convertToDottedKey(getObjectTranslation(path_1.default.join(sanitizedDirname, locale)));
return { locale, trans: translations };
})
.filter(({ trans }) => Object.keys(trans).length > 0)
.map(({ locale, trans }) => {
const basename = `php_${locale}.json`;
fs_1.default.writeFileSync(path_1.default.join(sanitizedDirname, basename), JSON.stringify(trans));
return { basename, path: path_1.default.join(sanitizedDirname, basename) };
});
}
/**
*
* @param source
* @param target
* @param keys
*/
function convertToDottedKey(source, target = {}, keys = []) {
Object.entries(source).forEach(([key, value]) => {
const newPrefix = [...keys, key];
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
convertToDottedKey(value, target, newPrefix);
}
else {
target[newPrefix.join('.')] = value;
}
});
return target;
}
/**
*
* @param dirname
*/
function getObjectTranslation(dirname) {
const translations = {};
fs_1.default.readdirSync(dirname).forEach((basename) => {
const absoluteFile = path_1.default.join(dirname, basename);
const key = basename.replace(/\.\w+$/, '');
if (fs_1.default.statSync(absoluteFile).isDirectory()) {
translations[key] = getObjectTranslation(absoluteFile);
}
else {
const fileContent = fs_1.default.readFileSync(absoluteFile, 'utf-8');
translations[key] = (0, php_array_reader_1.fromString)(fileContent);
}
});
return translations;
}
;