mon-entreprise/source/engine/translateRules.ts

75 lines
1.6 KiB
TypeScript
Raw Normal View History

import { assoc } from 'ramda'
/* Traduction */
const translateContrôle = (prop, rule, translation, lang) =>
assoc(
'contrôles',
rule.contrôles.map((control, i) => ({
...control,
message: translation[`${prop}.${i}.${lang}`]?.replace(
/^\[automatic\] /,
''
)
})),
rule
)
const translateSuggestion = (prop, rule, translation, lang) =>
assoc(
'suggestions',
Object.entries(rule.suggestions).reduce(
(acc, [name, value]) => ({
...acc,
[translation[`${prop}.${name}.${lang}`]?.replace(
/^\[automatic\] /,
''
)]: value
}),
{}
),
rule
)
export const attributesToTranslate = [
'titre',
'description',
'question',
'résumé',
'suggestions',
'contrôles',
'note'
]
const translateProp = (lang, translation) => (rule, prop) => {
if (prop === 'contrôles' && rule?.contrôles) {
return translateContrôle(prop, rule, translation, lang)
}
if (prop === 'suggestions' && rule?.suggestions) {
return translateSuggestion(prop, rule, translation, lang)
}
let propTrans = translation[prop + '.' + lang]
propTrans = propTrans?.replace(/^\[automatic\] /, '')
return propTrans ? assoc(prop, propTrans, rule) : rule
}
const translateRule = (lang, translations, name, rule) => {
let ruleTrans = translations[name]
if (!ruleTrans) {
return rule
}
return attributesToTranslate.reduce(
translateProp(lang, ruleTrans),
rule ?? {}
)
}
export default function translateRules(lang, translations, rules) {
const translatedRules = Object.fromEntries(
Object.entries(rules).map(([name, rule]) => [
name,
translateRule(lang, translations, name, rule)
])
)
return translatedRules
}