UNPKG

@dmvicent3/tcli

Version:

A CLI tool for managing translations in projects using next-translate

49 lines (48 loc) 1.72 kB
import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, } from 'fs'; import { join } from 'path'; export function ensureDir(path) { if (!existsSync(path)) { mkdirSync(path, { recursive: true }); } } export function loadTranslationFile(langDir, lang, namespace) { const filePath = join(langDir, lang, `${namespace}.json`); if (!existsSync(filePath)) return {}; return JSON.parse(readFileSync(filePath, 'utf-8')); } export function saveTranslationFile(langDir, lang, namespace, data) { const langPath = join(langDir, lang); ensureDir(langPath); const sorted = sortObjectKeys(data); const filePath = join(langPath, `${namespace}.json`); writeFileSync(filePath, JSON.stringify(sorted, null, 2)); } function sortObjectKeys(obj) { if (typeof obj !== 'object' || obj === null || Array.isArray(obj)) { return obj; } const sorted = {}; Object.keys(obj) .sort() .forEach((key) => { sorted[key] = sortObjectKeys(obj[key]); }); return sorted; } export function scanExistingStructure(langDir) { if (!existsSync(langDir)) return { langs: [], namespaces: [] }; const langs = readdirSync(langDir, { withFileTypes: true }) .filter((dirent) => dirent.isDirectory()) .map((dirent) => dirent.name); const namespaces = new Set(); langs.forEach((lang) => { const langPath = join(langDir, lang); const files = readdirSync(langPath) .filter((file) => file.endsWith('.json')) .map((file) => file.replace('.json', '')); files.forEach((ns) => namespaces.add(ns)); }); return { langs, namespaces: Array.from(namespaces) }; }