UNPKG

@cabloy/zod-errors-custom

Version:
57 lines (56 loc) 1.65 kB
import { replaceTemplate } from '@cabloy/word-utils'; export function translateError(localeAdapterFn, key, scope) { // 1. pre translate const content = localeAdapterFn(key); // 2. temp translate const [, args] = _replaceTemplate(content, scope); if (args.length === 0) return content; let message = localeAdapterFn(key, ...args); // 3. extact translate message = replaceTemplate(message, scope); return message; } function _replaceTemplate(content, scope) { if (!content) return [content, []]; if (!scope) return [content, []]; const args = []; content = content.toString().replace(/(\\)?\{\{ *([\w.]+) *\}\}/g, (block, skip, key) => { if (skip) { return block.substring(skip.length); } let value = getProperty(scope, key); value = value !== undefined ? value : ''; args.push(value); return '%s'; }); return [content, args]; } function getProperty(obj, name, sep) { return _getProperty(obj, name, sep, false); } function _getProperty(obj, name, sep, forceObject) { if (!obj) return undefined; const names = name.split(sep || '.'); // loop for (const name of names) { if (obj[name] === undefined || obj[name] === null) { if (forceObject) { obj[name] = {}; } else { obj = obj[name]; break; } } obj = obj[name]; } return obj; } export function toRaw(observed) { const raw = observed && observed.__v_raw; return raw ? toRaw(raw) : observed; }