UNPKG

i18n-llm-translate

Version:

Automatically translates namespace-based JSON translation files across multiple languages from any source language

85 lines (84 loc) 3.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatLanguageContainerDirectoryName = formatLanguageContainerDirectoryName; exports.flattenObject = flattenObject; exports.unflattenObject = unflattenObject; exports.logWithColor = logWithColor; function formatLanguageContainerDirectoryName(languageCode, options) { if (!options.namesMapping) return languageCode; if (!options.namesMapping.languages) return languageCode; if (typeof options.namesMapping.languages === 'function') return options.namesMapping.languages(languageCode, options); if (languageCode === options.baseLanguageCode) { if (!options.namesMapping.languages.base) return languageCode; return formatLanguageDirectoryName(options.namesMapping.languages.base, languageCode); } if (!options.namesMapping.languages.targets) return languageCode; return formatLanguageDirectoryName(options.namesMapping.languages.targets, languageCode); } function extractFirstBracedValue(str) { const match = str.match(/\{(.*?)}/); return match ? match[1] : null; } function formatLanguageDirectoryName(format, languageCode) { const variable = extractFirstBracedValue(format); if (!variable) throw new Error(`Invalid format: "${format}". Expected a placeholder like "{language}", but none was found.`); const tmp = variable.replace('language', ''); if (variable === tmp) throw new Error(`Invalid format: "${format}". Found placeholder "{${variable}}", but it does not contain "language".`); if (tmp === '!') languageCode = languageCode.toUpperCase(); if (tmp === '_') languageCode = languageCode.toLowerCase(); return format.replace(`{${variable}}`, languageCode); } function flattenObject(obj, parentKey = '') { let result = {}; for (const key in obj) { if (obj.hasOwnProperty(key)) { const newKey = parentKey ? `${parentKey}.${key}` : key; if (typeof obj[key] === 'object' && obj[key] !== null) { Object.assign(result, flattenObject(obj[key], newKey)); } else { result[newKey] = String(obj[key]); } } } return result; } function unflattenObject(flatTranslations) { const result = {}; for (const key in flatTranslations) { if (flatTranslations.hasOwnProperty(key)) { const keys = key.split('.'); let current = result; keys.forEach((part, index) => { if (index === keys.length - 1) { current[part] = flatTranslations[key]; } else { if (!current[part]) { current[part] = {}; } current = current[part]; } }); } } return result; } function logWithColor(color, firstMessage, ...otherMessages) { const colorCodes = { red: "\x1b[31m", green: "\x1b[32m", yellow: "\x1b[33m" }; const colorCode = colorCodes[color] || "\x1b[0m"; // Default to reset if invalid color console.log(`${colorCode}%s\x1b[0m`, firstMessage, ...otherMessages); }