镜像自地址
https://github.com/lhly/cloud-drive-renamer.git
已同步 2026-10-21 06:01:51 +08:00
添加完整的国际化支持,包括简体中文、繁体中文和英文翻译 新增语言切换功能,支持运行时动态更新界面语言 修复content script和popup之间的语言同步问题 添加翻译文件转换脚本和单元测试 更新相关组件以支持动态语言切换
91 行
2.5 KiB
JavaScript
91 行
2.5 KiB
JavaScript
/**
|
|
* 将 Chrome Extension messages.json 格式转换为纯 JSON 翻译文件
|
|
*
|
|
* 输入: _locales/{locale}/messages.json (Chrome Extension 格式)
|
|
* 输出: src/locales/{locale}.json (简化格式)
|
|
*/
|
|
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
const LOCALES_DIR = path.join(__dirname, '../_locales');
|
|
const OUTPUT_DIR = path.join(__dirname, '../src/locales');
|
|
|
|
const SUPPORTED_LANGUAGES = ['zh_CN', 'zh_TW', 'en'];
|
|
|
|
console.log('🔄 Starting i18n conversion...\n');
|
|
|
|
// 确保输出目录存在
|
|
if (!fs.existsSync(OUTPUT_DIR)) {
|
|
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
|
console.log('✅ Created output directory:', OUTPUT_DIR);
|
|
}
|
|
|
|
let totalKeys = 0;
|
|
const conversionResults = [];
|
|
|
|
for (const locale of SUPPORTED_LANGUAGES) {
|
|
const inputFile = path.join(LOCALES_DIR, locale, 'messages.json');
|
|
const outputFile = path.join(OUTPUT_DIR, `${locale}.json`);
|
|
|
|
try {
|
|
console.log(`📖 Processing ${locale}...`);
|
|
|
|
// 读取 Chrome Extension 格式的 messages.json
|
|
const messagesData = JSON.parse(fs.readFileSync(inputFile, 'utf-8'));
|
|
|
|
// 转换为简化格式 { key: message }
|
|
const translations = {};
|
|
let keyCount = 0;
|
|
|
|
for (const [key, value] of Object.entries(messagesData)) {
|
|
if (value && typeof value === 'object' && value.message) {
|
|
translations[key] = value.message;
|
|
keyCount++;
|
|
}
|
|
}
|
|
|
|
totalKeys = keyCount; // 所有语言应该有相同数量的键
|
|
|
|
// 写入输出文件(美化格式)
|
|
fs.writeFileSync(
|
|
outputFile,
|
|
JSON.stringify(translations, null, 2),
|
|
'utf-8'
|
|
);
|
|
|
|
conversionResults.push({
|
|
locale,
|
|
keyCount,
|
|
outputFile,
|
|
success: true,
|
|
});
|
|
|
|
console.log(` ✅ Converted ${keyCount} keys`);
|
|
console.log(` 📄 Output: ${path.relative(process.cwd(), outputFile)}`);
|
|
} catch (error) {
|
|
console.error(` ❌ Failed to convert ${locale}:`, error.message);
|
|
conversionResults.push({
|
|
locale,
|
|
success: false,
|
|
error: error.message,
|
|
});
|
|
}
|
|
}
|
|
|
|
console.log('\n📊 Conversion Summary:');
|
|
console.log('─'.repeat(50));
|
|
for (const result of conversionResults) {
|
|
if (result.success) {
|
|
console.log(`✅ ${result.locale}: ${result.keyCount} keys`);
|
|
} else {
|
|
console.log(`❌ ${result.locale}: ${result.error}`);
|
|
}
|
|
}
|
|
console.log('─'.repeat(50));
|
|
console.log(`\n✨ Conversion completed! Total keys: ${totalKeys}`);
|