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
JavaScript
;
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);
}