const fs = require("fs"); const path = require("path"); const baseDir = path.resolve(__dirname, "src/locales"); function buildNamespaceZh() { return { title: "日期计算器", toolTitle: "日期计算器", toolDescription: "日期间隔计算与日期推算", toolCategory: "实用", heroTitle: "日期计算器", backToList: "返回工具列表", tab: { interval: "日期间隔", calc: "日期推算", }, quick: { today: "今天", tomorrow: "明天", week: "一周后", month: "一月后", year: "一年后", plus7d: "+7天", plus30d: "+30天", plus365d: "+365天", plus100d: "+100天", }, field: { startDate: "起始日期", endDate: "结束日期", baseDate: "起始日期", operation: "运算", days: "天数", }, placeholder: { chooseStart: "选择起始日期", chooseEnd: "选择结束日期", chooseBase: "选择起始日期", }, result: { totalDays: "总天数", workDays: "工作日", weeks: "周数", months: "月数", years: "年数", startDate: "起始日期", endDate: "结束日期", targetDate: "目标日期", targetShort: "目标日期(短格式)", targetTimestamp: "目标日期时间戳", targetIso: "目标日期 ISO", intervalDays: "间隔天数", }, unit: { days: "天", week: "周", month: "个月", year: "年", about: "约", excludeWeekend: "不含周末", sameDay: "同一天", }, empty: { selectBoth: "选择两个日期后自动计算间隔", selectBase: "选择起始日期后自动推算目标日期", }, clipboard: { copied: "已复制到剪贴板", }, tips: { interval: { title: "日期间隔", desc: "计算两个日期之间的天数、工作日、周数、月数和年数。", }, calc: { title: "日期推算", desc: "从指定日期向前或向后推算任意天数,快速得到目标日期。", }, privacy: { title: "数据安全", desc: "所有计算在本地浏览器完成,不会上传任何数据到服务器。", }, }, }; } function buildNamespaceEn() { return { title: "Date Calculator", toolTitle: "Date Calculator", toolDescription: "Calculate date intervals and project dates", toolCategory: "Utility", heroTitle: "Date Calculator", backToList: "Back to tool list", tab: { interval: "Date Interval", calc: "Date Projection", }, quick: { today: "Today", tomorrow: "Tomorrow", week: "In 1 week", month: "In 1 month", year: "In 1 year", plus7d: "+7 days", plus30d: "+30 days", plus365d: "+365 days", plus100d: "+100 days", }, field: { startDate: "Start Date", endDate: "End Date", baseDate: "Base Date", operation: "Operation", days: "Days", }, placeholder: { chooseStart: "Choose start date", chooseEnd: "Choose end date", chooseBase: "Choose base date", }, result: { totalDays: "Total Days", workDays: "Work Days", weeks: "Weeks", months: "Months", years: "Years", startDate: "Start Date", endDate: "End Date", targetDate: "Target Date", targetShort: "Target Date (short)", targetTimestamp: "Target Date Timestamp", targetIso: "Target Date ISO", intervalDays: "Interval Days", }, unit: { days: "days", week: "week", month: "months", year: "years", about: "about", excludeWeekend: "excluding weekends", sameDay: "same day", }, empty: { selectBoth: "Interval will be calculated automatically once both dates are selected", selectBase: "Target date will be calculated automatically once the base date is selected", }, clipboard: { copied: "Copied to clipboard", }, tips: { interval: { title: "Date Interval", desc: "Calculate the days, work days, weeks, months and years between two dates.", }, calc: { title: "Date Projection", desc: "Project any number of days forward or backward from a given date.", }, privacy: { title: "Data Safety", desc: "All calculations run locally in your browser. No data is uploaded to any server.", }, }, }; } function buildNamespaceJa() { return { title: "日付計算ツール", toolTitle: "日付計算ツール", toolDescription: "日付の間隔と日付の推算", toolCategory: "ユーティリティ", heroTitle: "日付計算ツール", backToList: "ツール一覧に戻る", tab: { interval: "日付間隔", calc: "日付推算", }, quick: { today: "今日", tomorrow: "明日", week: "1週間後", month: "1か月後", year: "1年後", plus7d: "+7日", plus30d: "+30日", plus365d: "+365日", plus100d: "+100日", }, field: { startDate: "開始日", endDate: "終了日", baseDate: "基準日", operation: "演算", days: "日数", }, placeholder: { chooseStart: "開始日を選択", chooseEnd: "終了日を選択", chooseBase: "基準日を選択", }, result: { totalDays: "総日数", workDays: "営業日", weeks: "週数", months: "月数", years: "年数", startDate: "開始日", endDate: "終了日", targetDate: "目標日", targetShort: "目標日(短縮)", targetTimestamp: "目標日タイムスタンプ", targetIso: "目標日 ISO", intervalDays: "間隔日数", }, unit: { days: "日", week: "週", month: "か月", year: "年", about: "約", excludeWeekend: "土日を除く", sameDay: "同日", }, empty: { selectBoth: "2つの日付を選択すると間隔が自動計算されます", selectBase: "基準日を選択すると目標日が自動で推算されます", }, clipboard: { copied: "クリップボードにコピーしました", }, tips: { interval: { title: "日付間隔", desc: "2つの日付の間の日数、営業日、週数、月数、年数を計算します。", }, calc: { title: "日付推算", desc: "指定した日付から任意の日数を前後に移動し、目標日をすばやく求めます。", }, privacy: { title: "データの安全性", desc: "すべての計算はブラウザ上でローカル実行され、サーバーにデータが送信されることはありません。", }, }, }; } function buildNamespaceKo() { return { title: "날짜 계산기", toolTitle: "날짜 계산기", toolDescription: "날짜 간격 계산 및 날짜 추정", toolCategory: "유틸리티", heroTitle: "날짜 계산기", backToList: "도구 목록으로 돌아가기", tab: { interval: "날짜 간격", calc: "날짜 추정", }, quick: { today: "오늘", tomorrow: "내일", week: "일주일 후", month: "한 달 후", year: "일 년 후", plus7d: "+7일", plus30d: "+30일", plus365d: "+365일", plus100d: "+100일", }, field: { startDate: "시작 날짜", endDate: "종료 날짜", baseDate: "기준 날짜", operation: "연산", days: "일 수", }, placeholder: { chooseStart: "시작 날짜 선택", chooseEnd: "종료 날짜 선택", chooseBase: "기준 날짜 선택", }, result: { totalDays: "총 일 수", workDays: "평일", weeks: "주 수", months: "월 수", years: "년 수", startDate: "시작 날짜", endDate: "종료 날짜", targetDate: "목표 날짜", targetShort: "목표 날짜 (짧은 형식)", targetTimestamp: "목표 날짜 타임스탬프", targetIso: "목표 날짜 ISO", intervalDays: "간격 일 수", }, unit: { days: "일", week: "주", month: "개월", year: "년", about: "약", excludeWeekend: "주말 제외", sameDay: "같은 날", }, empty: { selectBoth: "두 날짜를 선택하면 간격이 자동으로 계산됩니다", selectBase: "기준 날짜를 선택하면 목표 날짜가 자동으로 계산됩니다", }, clipboard: { copied: "클립보드에 복사되었습니다", }, tips: { interval: { title: "날짜 간격", desc: "두 날짜 사이의 일 수, 평일, 주 수, 월 수, 년 수를 계산합니다.", }, calc: { title: "날짜 추정", desc: "지정한 날짜로부터 앞뒤로 임의의 일 수를 계산해 목표 날짜를 빠르게 구합니다.", }, privacy: { title: "데이터 안전", desc: "모든 계산은 브라우저 로컬에서 실행되며, 어떤 데이터도 서버로 전송되지 않습니다.", }, }, }; } function buildNamespaceZhTW() { return { title: "日期計算器", toolTitle: "日期計算器", toolDescription: "日期間隔計算與日期推算", toolCategory: "實用", heroTitle: "日期計算器", backToList: "返回工具列表", tab: { interval: "日期間隔", calc: "日期推算", }, quick: { today: "今天", tomorrow: "明天", week: "一週後", month: "一個月後", year: "一年後", plus7d: "+7天", plus30d: "+30天", plus365d: "+365天", plus100d: "+100天", }, field: { startDate: "起始日期", endDate: "結束日期", baseDate: "起始日期", operation: "運算", days: "天數", }, placeholder: { chooseStart: "選擇起始日期", chooseEnd: "選擇結束日期", chooseBase: "選擇起始日期", }, result: { totalDays: "總天數", workDays: "工作日", weeks: "週數", months: "月數", years: "年數", startDate: "起始日期", endDate: "結束日期", targetDate: "目標日期", targetShort: "目標日期(短格式)", targetTimestamp: "目標日期時間戳", targetIso: "目標日期 ISO", intervalDays: "間隔天數", }, unit: { days: "天", week: "週", month: "個月", year: "年", about: "約", excludeWeekend: "不含週末", sameDay: "同一天", }, empty: { selectBoth: "選擇兩個日期後自動計算間隔", selectBase: "選擇起始日期後自動推算目標日期", }, clipboard: { copied: "已複製到剪貼簿", }, tips: { interval: { title: "日期間隔", desc: "計算兩個日期之間的天數、工作日、週數、月數和年數。", }, calc: { title: "日期推算", desc: "從指定日期向前或向後推算任意天數,快速得到目標日期。", }, privacy: { title: "資料安全", desc: "所有計算在本地瀏覽器完成,不會上傳任何資料到伺服器。", }, }, }; } function buildNamespaceRu() { return { title: "Калькулятор дат", toolTitle: "Калькулятор дат", toolDescription: "Расчёт интервала и проекция дат", toolCategory: "Утилита", heroTitle: "Калькулятор дат", backToList: "Вернуться к списку инструментов", tab: { interval: "Интервал дат", calc: "Проекция даты", }, quick: { today: "Сегодня", tomorrow: "Завтра", week: "Через неделю", month: "Через месяц", year: "Через год", plus7d: "+7 дней", plus30d: "+30 дней", plus365d: "+365 дней", plus100d: "+100 дней", }, field: { startDate: "Начальная дата", endDate: "Конечная дата", baseDate: "Базовая дата", operation: "Операция", days: "Дней", }, placeholder: { chooseStart: "Выберите начальную дату", chooseEnd: "Выберите конечную дату", chooseBase: "Выберите базовую дату", }, result: { totalDays: "Всего дней", workDays: "Рабочих дней", weeks: "Недель", months: "Месяцев", years: "Лет", startDate: "Начальная дата", endDate: "Конечная дата", targetDate: "Целевая дата", targetShort: "Целевая дата (короткий формат)", targetTimestamp: "Целевая дата — временная метка", targetIso: "Целевая дата — ISO", intervalDays: "Дней в интервале", }, unit: { days: "дней", week: "нед.", month: "мес.", year: "лет", about: "около", excludeWeekend: "без выходных", sameDay: "тот же день", }, empty: { selectBoth: "Интервал будет автоматически рассчитан после выбора обеих дат", selectBase: "Целевая дата будет автоматически рассчитана после выбора базовой даты", }, clipboard: { copied: "Скопировано в буфер обмена", }, tips: { interval: { title: "Интервал дат", desc: "Рассчитайте дни, рабочие дни, недели, месяцы и годы между двумя датами.", }, calc: { title: "Проекция даты", desc: "Сдвиньте любое количество дней вперёд или назад от указанной даты.", }, privacy: { title: "Безопасность данных", desc: "Все вычисления выполняются локально в браузере. Никакие данные не отправляются на сервер.", }, }, }; } const files = { "zh.json": buildNamespaceZh(), "en.json": buildNamespaceEn(), "ja.json": buildNamespaceJa(), "ko.json": buildNamespaceKo(), "zh-TW.json": buildNamespaceZhTW(), "ru.json": buildNamespaceRu(), }; function detectIndent(jsonStr) { const lines = jsonStr.split("\n"); for (let i = 1; i < lines.length; i++) { const m = lines[i].match(/^(\s+)\S/); if (m) return m[1]; } return " "; } for (const [filename, namespace] of Object.entries(files)) { const fullPath = path.join(baseDir, filename); let src = fs.readFileSync(fullPath, "utf8"); if (src.charCodeAt(0) === 0xfeff) src = src.slice(1); const indent = detectIndent(src); const topIndent = indent; // top level keys indent // parse existing to check it's valid json const existing = JSON.parse(src); if (existing.dateCalculator) { console.log(`[SKIP] ${filename} already has dateCalculator`); continue; } existing.dateCalculator = namespace; // Build new JSON with same indent size const indentSize = indent.length; const newContent = JSON.stringify(existing, null, indentSize) + "\n"; fs.writeFileSync(fullPath, newContent, "utf8"); console.log(`[OK] ${filename} updated (indent=${indentSize} spaces)`); } console.log("All files processed.");