Files
aurak/final_cleanup.js
Developer 0a9588abb7 feat: implement QuestionBank CRUD with pagination and template query
- Add pagination support to findAll (page, limit query params)
- Add findByTemplateId method to service
- Add GET /by-template/:templateId endpoint to controller
- Service already includes CRUD for QuestionBank and QuestionBankItem
2026-04-23 17:19:11 +08:00

90 lines
4.3 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const translationsPath = path.join('d:', 'workspace', 'AuraK', 'web', 'utils', 'translations.ts');
const betterTranslations = {
navAgent: { zh: "智能体", en: "Agent", ja: "エージェント" },
navNotebook: { zh: "笔记本", en: "Notebook", ja: "ノートブック" },
navPlugin: { zh: "插件", en: "Plugins", ja: "プラグイン" },
navTenants: { zh: "租户管理", en: "Tenants", ja: "テナント管理" },
noNotesFound: { zh: "未找到笔记", en: "No notes found", ja: "ノートが見つかりません" },
notebookDesc: { zh: "笔记本功能可以帮助您整理和归纳知识。", en: "Notebooks help you organize and summarize knowledge.", ja: "ノートブックは知識の整理と要約に役立ちます。" },
personalNotebook: { zh: "个人笔记本", en: "Personal Notebook", ja: "個人用ノートブック" },
pluginBy: { zh: "作者", en: "By", ja: "作者" },
pluginCommunity: { zh: "社区插件", en: "Community Plugins", ja: "コミュニティプラグイン" },
pluginConfig: { zh: "插件配置", en: "Plugin Config", ja: "プラグイン設定" },
pluginDesc: { zh: "扩展系统功能。", en: "Extend system capabilities.", ja: "システム機能を拡張します。" },
pluginOfficial: { zh: "官方插件", en: "Official Plugins", ja: "公式プラグイン" },
pluginTitle: { zh: "插件", en: "Plugins", ja: "プラグイン" },
searchAgent: { zh: "搜索智能体", en: "Search Agents", ja: "エージェントを検索" },
searchPlugin: { zh: "搜索插件", en: "Search Plugins", ja: "プラグインを検索" },
statusRunning: { zh: "运行中", en: "Running", ja: "実行中" },
statusStopped: { zh: "已停止", en: "Stopped", ja: "停止中" },
success: { zh: "成功", en: "Success", ja: "成功" },
updatedAtPrefix: { zh: "最后更新于", en: "Last updated at", ja: "最終更新日:" },
visualVision: { zh: "视觉分析", en: "Visual Analysis", ja: "視覚分析" },
warning: { zh: "警告", en: "Warning", ja: "警告" },
"x-api-key": { zh: "API 密钥", en: "API Key", ja: "APIキー" },
"x-tenant-id": { zh: "租户 ID", en: "Tenant ID", ja: "テナントID" },
"x-user-language": { zh: "用户语言", en: "User Language", ja: "ユーザー言語" },
unknown: { zh: "未知", en: "Unknown", ja: "不明" }
};
let content = fs.readFileSync(translationsPath, 'utf8');
function isValidIdentifier(id) {
return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(id);
}
// Simple parser to extract blocks
const langBlocks = content.split(/(\w+): \{/);
let header = langBlocks[0];
let newContent = header;
for (let i = 1; i < langBlocks.length; i += 2) {
const lang = langBlocks[i];
let block = langBlocks[i + 1];
// Find the end of this block
let endIdx = block.lastIndexOf('},');
if (endIdx === -1) endIdx = block.lastIndexOf('}'); // last block
let footer = block.substring(endIdx);
let itemsStr = block.substring(0, endIdx);
let items = itemsStr.split('\n');
let seenKeys = new Set();
let resultItems = [];
for (let line of items) {
let match = line.match(/^(\s+)(['"]?[a-zA-Z0-9_-]+['"]?):(.*)/);
if (match) {
let indent = match[1];
let keyStr = match[2];
let rest = match[3];
let actualKey = keyStr.replace(/['"]/g, '');
if (seenKeys.has(actualKey)) continue;
seenKeys.add(actualKey);
let val = rest.trim().replace(/,$/, '');
// If it's a placeholder (same as key) or empty, use better translation if available
if ((val === `"${actualKey}"` || val === `'${actualKey}'`) && betterTranslations[actualKey]) {
val = JSON.stringify(betterTranslations[actualKey][lang] || betterTranslations[actualKey].en || actualKey);
}
const quotedKey = isValidIdentifier(actualKey) ? actualKey : `"${actualKey}"`;
resultItems.push(`${indent}${quotedKey}: ${val},`);
} else if (line.trim().startsWith('//') || line.trim() === '') {
resultItems.push(line);
}
}
newContent += `${lang}: {` + resultItems.join('\n') + footer;
}
fs.writeFileSync(translationsPath, newContent, 'utf8');
console.log('Final cleanup and translation improvement complete!');