Newer
Older
import path from 'path'
import { readFileSync, writeFileSync, accessSync, R_OK, W_OK, readdirSync, statSync } from 'fs'
import gulp from 'gulp'
import { ensureDirSync, ensureFileSync } from 'fs-extra/esm'
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const { join, basename, extname } = path
const { task } = gulp
langFolder: join(__dirname, 'src/lang/'),
srcFolder: join(__dirname, 'src/')
// let projPath = readlineSync.question("Please enter project path (path of 'src' folder) ")
// projPath = projPath + '/'
let projPath = paths.srcFolder
readPrevi18n()
backUpI18nFile(projPath)
i18nGenerator(projPath, ['en'], 'en')
done()
})
function backUpI18nFile (projPath) {
let d = new Date()
let dformat = [paddingZero(d.getDate()), paddingZero(d.getMonth() + 1),
paddingZero(d.getFullYear())].join('_') + '_' +
[paddingZero(d.getHours()),
paddingZero(d.getMinutes()),
paddingZero(d.getSeconds()), paddingZero(d.getMilliseconds())].join('_')
let backUpFolderPath = paths.langFolder + 'backup'
let backUpFilePath = backUpFolderPath + '/en_' + dformat + '.json'
try {
} catch (error) {
console.log('Cannot create backup folder...')
}
let enFilePath = paths.langFolder + 'en.json'
let content = readFileSync(enFilePath, 'utf8')
writeFileSync(backUpFilePath, JSON.parse(JSON.stringify(content)))
}
function paddingZero (number) {
if (number <= 9) {
let temp = '0' + number.toString()
return temp
}
return number.toString()
}
function createDvJson (projPath, objToWrite) {
for (let key in objToWrite) {
if (typeof objToWrite[key] === 'object') {
let temp = objToWrite[key]
for (let newKey in temp) {
if (temp.hasOwnProperty(newKey)) {
temp[newKey] = newKey
}
}
}
}
let dvFilePath = paths.langFolder + 'dv.json'
writeFileSync(dvFilePath, JSON.stringify(objToWrite))
}
function readPrevi18n () {
let enFilePath = paths.langFolder + 'en.json'
try {
accessSync(enFilePath, R_OK | W_OK)
let content = readFileSync(enFilePath, 'utf8')
objToWrite = JSON.parse(content)
} catch (e) {
console.log('en.json file is missing...')
console.log('Created en.json file...')
objToWrite = {}
}
}
function i18nGenerator (projPath, langArray, defaultLanguage) {
let fileList = walkSync(projPath)
let flag = 0
let i
let len = fileList.length
let regexString = `([$]t[(]('|")##(.+?)##)(\\s*\\s*)(@@([\\s\\S]*?)@@('|")[)])`
let regex = new RegExp(regexString, 'gi')
if (fileList != null && fileList !== undefined && fileList.length > 0) {
for (i = 0; i < fileList.length; i++) {
flag++
if (flag === len) {
let fileList = walkSync(projPath)
let i; let len = fileList.length
if (fileList !== null && fileList !== undefined && fileList.length > 0) {
for (i = 0; i < len; i++) {
let file = fileList[i]
let keyPrefix = basename(file).split('.')[0]
let content = readFileSync(file, 'utf8')
let i18nContentsToBeReplaced = content.match(regex)
let translatedAdded = content
if (i18nContentsToBeReplaced != null && i18nContentsToBeReplaced !== '' && i18nContentsToBeReplaced !== undefined && i18nContentsToBeReplaced.length > 0) {
for (let j = 0; j < i18nContentsToBeReplaced.length; j++) {
let extractKeyFrom = i18nContentsToBeReplaced[j].toString()
let key = extractKeyFrom.substring(extractKeyFrom.indexOf('##') + 2, extractKeyFrom.lastIndexOf('##')).trim()
let value = extractKeyFrom.substring(extractKeyFrom.indexOf('@@') + 2, extractKeyFrom.lastIndexOf('@@')).trim()
// let replacement = "{{'" + key + "' | translate}}";
let replacement = "$t('" + keyPrefix + '.' + key + "')"
// console.log('keyPrefix + key', keyPrefix, key)
translatedAdded = translatedAdded.replace(extractKeyFrom, replacement)
prepareI18nObject(keyPrefix, key, value)
}
}
if (i === (len - 1)) {
console.log('\n\n')
console.log('Internationalization successfully done on ' + (i + 1) + ' files')
console.log('\n\n')
let enFilePath = paths.langFolder + 'en.json'
writeFileSync(enFilePath, JSON.stringify(objToWrite))
createDvJson(projPath, objToWrite)
}
}
}
}
}
}
}
let walkSync = function (dir, filelist) {
filelist = filelist || []
files.forEach(function (file) {
filelist = walkSync(dir + file + '/', filelist)
} else {
filelist.push(dir + file)
}
}
})
return filelist
}
function prepareI18nObject (keyPrefix, key, value) {
if (!objToWrite.hasOwnProperty(keyPrefix)) {
objToWrite[keyPrefix] = {}
}
let parentObj = objToWrite[keyPrefix]
parentObj[key] = value
}