UNPKG

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
"use strict"; 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; }