var fs = require('fs') var path = require('path') let R = require('ramda') let { safeLoad } = require('js-yaml') let externalizationPath = 'source/règles/externalized.yaml' let rules = safeLoad( fs.readFileSync(path.resolve('source/règles/base.yaml'), 'utf-8') ) let currentExternalization = safeLoad( fs.readFileSync(path.resolve(externalizationPath), 'utf-8') ) let attributesToExternalize = [ 'titre', 'description', 'question', 'résumé', 'suggestions', 'contrôles' ] function getMissingTranslations() { let missingTranslations = [] let resolved = Object.entries(rules) .map(([dottedName, rule]) => [ dottedName, !rule || !rule.titre ? { ...rule, titre: dottedName.split(' . ').slice(-1)[0] } : rule ]) .map(([dottedName, rule]) => ({ [dottedName]: R.mergeAll( R.toPairs(rule) .filter(([, v]) => !!v) .map(([k, v]) => { let attrToTranslate = attributesToExternalize.find(R.equals(k)) if (!attrToTranslate) return {} let enTrad = attrToTranslate + '.en', frTrad = attrToTranslate + '.fr' let currentTranslation = currentExternalization[dottedName] // Check if a human traduction exists already for this attribute and if // it does need to be updated if ( currentTranslation && currentTranslation[enTrad] && currentTranslation[frTrad] === v ) return { [enTrad]: currentTranslation[enTrad], [frTrad]: v } if (['contrôles', 'suggestions'].includes(attrToTranslate)) { return { [frTrad]: v } } missingTranslations.push([dottedName, enTrad, v]) return { [frTrad]: v } }) ) })) resolved = R.mergeAll(resolved) return [missingTranslations, resolved] } module.exports = { getMissingTranslations, externalizationPath }