Skip to content

Commit dfece3d

Browse files
author
Jet
committed
Chore:Lang Files Check Tool
fix lang issues
2 parents 217b1ce + fc23f49 commit dfece3d

24 files changed

Lines changed: 1583 additions & 694 deletions

‎main.js‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,8 @@ function initializeManagers() {
150150
shell,
151151
t: managers.i18n.t,
152152
getWindow: () => managers.window.getMainWindow(),
153-
releasePageUrl: RELEASE_PAGE_URL
153+
releasePageUrl: RELEASE_PAGE_URL,
154+
currentVersion: app.getVersion()
154155
});
155156

156157
// 7. 创建导入导出管理器

‎scripts/check-locale-files.js‎

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import fs from 'fs';
2+
import path from 'path';
3+
import { fileURLToPath } from 'url';
4+
5+
const __filename = fileURLToPath(import.meta.url);
6+
const __dirname = path.dirname(__filename);
7+
8+
// 读取 zh-CN.json 作为参考顺序
9+
const localesDir = path.join(__dirname, '../src/locales');
10+
const referenceFile = path.join(localesDir, 'zh-CN.json');
11+
12+
console.log('[INFO] 读取参考简体中文语言文件: zh-CN.json');
13+
const referenceContent = fs.readFileSync(referenceFile, 'utf8');
14+
const referenceObj = JSON.parse(referenceContent);
15+
16+
// 获取参考文件的键顺序
17+
const referenceKeys = Object.keys(referenceObj);
18+
console.log(`[INFO] 简体中文语言文件包含 ${referenceKeys.length} 个翻译主键\n`);
19+
20+
// 获取所有语言文件
21+
const localeFiles = fs.readdirSync(localesDir)
22+
.filter(file => file.endsWith('.json') && file !== 'zh-CN.json');
23+
24+
console.log(`[INFO] 找到 ${localeFiles.length} 个语言文件\n`);
25+
26+
let processedCount = 0;
27+
let errorCount = 0;
28+
const filesWithMissingKeys = [];
29+
const failedFiles = [];
30+
31+
localeFiles.forEach(file => {
32+
try {
33+
const filePath = path.join(localesDir, file);
34+
35+
// 读取当前文件
36+
const content = fs.readFileSync(filePath, 'utf8');
37+
const currentObj = JSON.parse(content);
38+
39+
// 创建新的有序对象
40+
const sortedObj = {};
41+
42+
// 按照参考文件的顺序添加键
43+
referenceKeys.forEach(key => {
44+
if (currentObj.hasOwnProperty(key)) {
45+
sortedObj[key] = currentObj[key];
46+
}
47+
});
48+
49+
// 检查是否有多余的键(不在参考文件中的)
50+
const extraKeys = Object.keys(currentObj).filter(key => !referenceKeys.includes(key));
51+
if (extraKeys.length > 0) {
52+
console.log(`[WARN] ${file}`);
53+
console.log(` 发现 ${extraKeys.length} 个额外的键: ${extraKeys.join(', ')}\n`);
54+
// 将额外的键添加到末尾
55+
extraKeys.forEach(key => {
56+
sortedObj[key] = currentObj[key];
57+
});
58+
}
59+
60+
// 检查是否有缺失的键
61+
const missingKeys = referenceKeys.filter(key => !currentObj.hasOwnProperty(key));
62+
if (missingKeys.length > 0) {
63+
console.log(`[WARN] ${file}`);
64+
console.log(` 缺少 ${missingKeys.length} 个键: ${missingKeys.join(', ')}\n`);
65+
filesWithMissingKeys.push({
66+
file,
67+
count: missingKeys.length,
68+
keys: missingKeys
69+
});
70+
}
71+
72+
// 写回文件,保持格式
73+
const sortedContent = JSON.stringify(sortedObj, null, 2) + '\n';
74+
fs.writeFileSync(filePath, sortedContent, 'utf8');
75+
76+
processedCount++;
77+
78+
} catch (error) {
79+
console.error(`[ERROR] ${file}`);
80+
console.error(` 错误: ${error.message}\n`);
81+
failedFiles.push({ file, error: error.message });
82+
errorCount++;
83+
}
84+
});
85+
86+
console.log('='.repeat(50));
87+
console.log(`\n[INFO] 处理结果:`);
88+
console.log(` 排序处理完成: ${processedCount - errorCount} 个语言文件`);
89+
if (errorCount > 0) {
90+
console.log(` 排序处理失败: ${errorCount} 个语言文件`);
91+
}
92+
if (filesWithMissingKeys.length > 0) {
93+
console.log(` 翻译主键缺失: ${filesWithMissingKeys.length} 个语言文件`);
94+
}
95+
96+
if (failedFiles.length > 0) {
97+
console.log(`\n[INFO] 以下语言文件处理失败:`);
98+
failedFiles.forEach(({ file, error }) => {
99+
console.log(` - ${file}: ${error}`);
100+
});
101+
}
102+
103+
if (filesWithMissingKeys.length > 0) {
104+
console.log(`\n[INFO] 以下语言文件缺少翻译键:`);
105+
filesWithMissingKeys.forEach(({ file, count, keys }) => {
106+
console.log(` - ${file}: 缺少 ${count} 个键`);
107+
console.log(` ${keys.join(', ')}`);
108+
});
109+
}
110+
111+
if (errorCount === 0 && filesWithMissingKeys.length === 0) {
112+
console.log(`\n[INFO] 其他语言文件与简体中文语言排序一致!\n`);
113+
} else {
114+
console.log(`\n[INFO] 排序完成,但语言文件缺少翻译键,需要处理\n`);
115+
}

‎src/assets/changelog/history_cn.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
### [0.3.1] - 2025-11-02
2+
#### 修复
3+
- 修复其他语言翻译缺失问题。
4+
#### 优化
5+
- 优化检查更新面板的交互体验。
6+
17
### [0.3.0] - 2025-10-24
28
#### 新增
39
- 新增笔记导入导出功能,支持NoteWizard Package(.nwp)格式、Markdown(.md)格式的导入及导出。

‎src/assets/changelog/history_en.md‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
### [0.3.1] - 2025-11-02
2+
#### Fixed
3+
- Fixed missing translation issues in other languages.
4+
#### Optimized
5+
- Optimized the interactive experience of the Check for Updates panel.
6+
17
### [0.3.0] - 2025-10-24
28
#### Added
39
- Added note import and export functionality, supporting the import and export of NoteWizard Package (.nwp) and Markdown (.md) formats.

‎src/locales/bn-BD.json‎

Lines changed: 95 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"appName": "নোটউইজার্ড",
23
"workspace": "কর্মক্ষেত্র",
34
"outline": "রূপরেখা",
45
"collapsePanel": "প্যানেল সংকুচিত করুন",
@@ -39,7 +40,6 @@
3940
"toolbar.insertLink": "লিঙ্ক সন্নিবেশ করুন",
4041
"toolbar.insertImage": "ছবি সন্নিবেশ করুন",
4142
"about.title": "নোটউইজার্ড সম্পর্কে",
42-
"appName": "নোটউইজার্ড",
4343
"about.version": "সংস্করণ",
4444
"about.description": "গোপনীয়তার উপর দৃষ্টি নিবদ্ধ একটি মার্কডাউন নোট অ্যাপ, কাস্টম এআই পরিষেবার সাথে একীভূত, যা আপনার ডেটাকে সবসময় নিরাপদ এবং নিয়ন্ত্রণে রাখে।",
4545
"about.electron": "ইলেকট্রন",
@@ -49,17 +49,23 @@
4949
"about.author": "লেখক: ",
5050
"about.license": "ওপেন সোর্স লাইসেন্স: ",
5151
"unknown": "অজানা ত্রুটি",
52-
"copyrights": "কপিরাইট © ২০২৫ নোটউইজার্ড টিম। সর্বস্বত্ব সংরক্ষিত।",
52+
"copyrights": "কপিরাইট ২০২৫ নোটউইজার্ড টিম। সর্বস্বত্ব সংরক্ষিত।",
5353
"labelAIProvider": "এআই প্রদানকারী",
5454
"labelAIModel": "এআই মডেল",
5555
"labelAIApiKey": "এপিআই কী",
5656
"labelAIEndpoint": "এপিআই এন্ডপয়েন্ট",
57+
"labelAIAssistantEnabled": "এআই সহায়ক",
58+
"textAIAssistantEnabled": "এআই সহায়ক সক্রিয় করুন",
59+
"labelAITypingDelay": "টাইপিং বিলম্ব",
60+
"labelAIMinInputLength": "সর্বনিম্ন ইনপুট দৈর্ঘ্য",
61+
"unitMilliseconds": "মিলিসেকেন্ড",
62+
"unitCharacters": "অক্ষর",
5763
"labelNoteSavePath": "নোট সংরক্ষণের পথ",
5864
"btnBrowse": "ব্রাউজ করুন...",
5965
"btnExportSetting": "রপ্তানি",
6066
"btnImportSetting": "আমদানি",
6167
"btnResetSetting": "রিসেট",
62-
"btnClose": "✖",
68+
"btnClose": "",
6369
"optionMicrosoftYaHei": "মাইক্রোসফট ইয়াহেই",
6470
"optionSimHei": "সিমহেই",
6571
"optionFangSong": "ফ্যাংসং",
@@ -72,19 +78,14 @@
7278
"changelog.errors.loadFailed": "লগ লোড ব্যর্থ",
7379
"changelog.loadMore": "সমস্ত লগ লোড করুন",
7480
"trash.title": "ট্র্যাশ",
81+
"trash.emptyState": "ট্র্যাশ খালি",
7582
"trash.emptyTrash": "ট্র্যাশ খালি করুন",
83+
"trash.items": "টি নোট",
7684
"trash.name": "নোটের নাম",
7785
"trash.filename": "ভৌত ফাইলের নাম",
7886
"trash.actions": "ক্রিয়াকলাপ",
7987
"trash.delete": "মুছুন",
8088
"trash.restore": "পুনরুদ্ধার",
81-
"trash.emptyState": "ট্র্যাশ খালি",
82-
"labelAIAssistantEnabled": "এআই সহায়ক",
83-
"textAIAssistantEnabled": "এআই সহায়ক সক্রিয় করুন",
84-
"labelAITypingDelay": "টাইপিং বিলম্ব",
85-
"labelAIMinInputLength": "সর্বনিম্ন ইনপুট দৈর্ঘ্য",
86-
"unitMilliseconds": "মিলিসেকেন্ড",
87-
"unitCharacters": "অক্ষর",
8889
"btnTestConnection": "সংযোগ পরীক্ষা করুন",
8990
"testConnectionSuccess": "সেবা সংযোগ পরীক্ষা সফল",
9091
"InputAllFields": "অনুগ্রহ করে সমস্ত প্রয়োজনীয় ক্ষেত্র পূরণ করুন",
@@ -107,6 +108,12 @@
107108
"menu.file": "ফাইল",
108109
"menu.file.open": "খুলুন",
109110
"menu.file.save": "সংরক্ষণ করুন",
111+
"menu.file.exportNotes": "সমস্ত নোট রপ্তানি করুন",
112+
"menu.file.exportNotes.package": "NoteWizard ফাইল ফর্ম্যাট (.nwp)",
113+
"menu.file.exportNotes.markdown": "Markdown ফাইল ফর্ম্যাট (.md)",
114+
"menu.file.importNotes": "নোট আমদানি করুন",
115+
"menu.file.importNotes.package": "NoteWizard ফাইল ফর্ম্যাট (.nwp)",
116+
"menu.file.importNotes.markdown": "Markdown ফাইল ফর্ম্যাট (.md)",
110117
"menu.file.preferences": "পছন্দসমূহ",
111118
"menu.file.quit": "প্রস্থান",
112119
"menu.view": "দেখুন",
@@ -155,6 +162,8 @@
155162
"file.renamedStatus": "নাম পরিবর্তন করা হয়েছে",
156163
"file.openedFolder": "ফোল্ডার খোলা হয়েছে",
157164
"file.loadedFile": "ফাইল লোড করা হয়েছে",
165+
"file.workspaceRefreshed": "কর্মক্ষেত্র রিফ্রেশ করা হয়েছে",
166+
"file.refreshFailed": "কর্মক্ষেত্র রিফ্রেশ ব্যর্থ",
158167
"dialog.deleteConfirm": "আপনি কি নিশ্চিত যে আপনি \"{name}\" মুছে ফেলতে চান?",
159168
"dialog.deleteFileConfirm": "আপনি কি নিশ্চিত যে আপনি ফাইল \"{name}\" মুছে ফেলতে চান? এই ক্রিয়াটি পূর্বাবস্থায় ফেরানো যাবে না।",
160169
"dialog.renamePrompt": "নতুন ফাইলের নাম লিখুন:",
@@ -183,5 +192,80 @@
183192
"noteSavePathUpdated": "নোট সংরক্ষণ পথ আপডেট করা হয়েছে",
184193
"noteSavePathUpdateConfirm": "নোট সংরক্ষণ পথ আপডেট করা হয়েছে। পরিবর্তন কার্যকর করতে পুনরায় চালু করা প্রয়োজন। এখন পুনরায় চালু করবেন?",
185194
"cancelledKeepPath": "বাতিল করা হয়েছে, মূল পথ রাখা হচ্ছে",
186-
"savePathFailed": "পথ সংরক্ষণ ব্যর্থ"
195+
"savePathFailed": "পথ সংরক্ষণ ব্যর্থ",
196+
"update.title.available": "নতুন সংস্করণ উপলব্ধ",
197+
"update.message.available": "NoteWizard এর নতুন সংস্করণ সনাক্ত করা হয়েছে। এখন ডাউনলোড করবেন?",
198+
"update.detail.newVersion": "সর্বশেষ সংস্করণ",
199+
"update.detail.currentVersion": "বর্তমান সংস্করণ",
200+
"update.detail.viewChangelog": "পরিবর্তন লগ",
201+
"update.detail.releaseNotes": "রিলিজ নোট",
202+
"update.detail.releaseNotesFallback": "আপডেট বিস্তারিত জানতে রিলিজ পেজ দেখুন।",
203+
"update.button.downloadNow": "এখনই ডাউনলোড করুন",
204+
"update.button.later": "পরে",
205+
"update.title.latest": "NoteWizard সর্বশেষ সংস্করণে আছে",
206+
"update.message.latest": "বর্তমান সংস্করণ সর্বশেষ।",
207+
"update.button.confirm": "ঠিক আছে",
208+
"update.title.inProgress": "পরীক্ষা চলছে",
209+
"update.message.inProgress": "একটি আপডেট পরীক্ষা ইতিমধ্যে চলছে।",
210+
"update.title.downloading": "ডাউনলোড হচ্ছে",
211+
"update.message.downloading": "আপডেট ডাউনলোড হচ্ছে।",
212+
"update.title.downloaded": "আপডেট ডাউনলোড হয়েছে",
213+
"update.message.downloaded": "নতুন সংস্করণ প্রস্তুত। আপডেট ইনস্টল করতে এখন অ্যাপ পুনরায় চালু করবেন?",
214+
"update.button.restartNow": "এখন পুনরায় চালু করুন",
215+
"update.button.remindLater": "পরে",
216+
"update.error.downloadFailed": "আপডেট ডাউনলোড ব্যর্থ",
217+
"update.error.generic": "আপডেট ত্রুটি",
218+
"update.error.checkFailed": "আপডেট পরীক্ষা ব্যর্থ",
219+
"update.devMode.title": "ডেভেলপার মোড",
220+
"update.devMode.message": "বর্তমানে ডেভেলপার মোডে আছেন। স্বয়ংক্রিয় আপডেট নিষ্ক্রিয়।",
221+
"update.devMode.detail": "আপনি GitHub Releases থেকে সর্বশেষ ইনস্টলার ম্যানুয়ালি ডাউনলোড করতে পারেন।",
222+
"update.button.openReleasePage": "রিলিজ পেজ খুলুন",
223+
"update.button.cancel": "বাতিল",
224+
"error.applicationError": "অ্যাপ্লিকেশন ত্রুটি",
225+
"error.uncaughtException": "একটি অপরিচালিত ত্রুটি ঘটেছে",
226+
"error.promiseError": "Promise ত্রুটি",
227+
"error.unhandledRejection": "অপরিচালিত Promise প্রত্যাখ্যান",
228+
"error.noWindow": "উইন্ডো ইনিশিয়ালাইজ হয়নি",
229+
"export.notewizard.dialog.title": "নোট রপ্তানি করুন",
230+
"export.notewizard.dialog.filterName": "NoteWizard Package",
231+
"export.notewizard.dialog.allFiles": "সমস্ত ফাইল",
232+
"export.notewizard.error.noWorkspace": "নোট সংরক্ষণ পথ পাওয়া যায়নি",
233+
"export.notewizard.error.databaseNotExist": "ডাটাবেস ডিরেক্টরি বিদ্যমান নেই",
234+
"export.notewizard.error.cancelled": "ব্যবহারকারী রপ্তানি বাতিল করেছেন",
235+
"export.notewizard.success.title": "রপ্তানি সফল",
236+
"export.notewizard.success.message": "{count}টি NoteWizard ফর্ম্যাট নোট সফলভাবে রপ্তানি করা হয়েছে",
237+
"export.notewizard.success.breakdown": "কর্মক্ষেত্র নোট: {active}টি\nট্র্যাশ নোট: {trashed}টি",
238+
"export.notewizard.success.path": "ফাইল সংরক্ষিত: {path}",
239+
"export.notewizard.error.title": "রপ্তানি ব্যর্থ",
240+
"export.notewizard.manifest.description": "NoteWizard নোট ডেটা রপ্তানি প্যাকেজ",
241+
"export.markdown.dialog.title": "রপ্তানি ফোল্ডার নির্বাচন করুন",
242+
"export.markdown.success.title": "রপ্তানি সফল",
243+
"export.markdown.success.message": "{count}টি Markdown ফর্ম্যাট নোট সফলভাবে রপ্তানি করা হয়েছে",
244+
"export.markdown.success.path": "ফাইল রপ্তানি করা হয়েছে: {path}",
245+
"export.markdown.error.title": "রপ্তানি ব্যর্থ",
246+
"export.markdown.error.noWorkspace": "নোট সংরক্ষণ পথ পাওয়া যায়নি",
247+
"export.markdown.error.databaseNotExist": "ডাটাবেস ডিরেক্টরি বিদ্যমান নেই",
248+
"export.markdown.error.cancelled": "ব্যবহারকারী রপ্তানি বাতিল করেছেন",
249+
"import.notewizard.dialog.title": "নোট আমদানি করুন",
250+
"import.notewizard.dialog.filterName": "NoteWizard Package",
251+
"import.notewizard.dialog.allFiles": "সমস্ত ফাইল",
252+
"import.notewizard.error.noWorkspace": "নোট সংরক্ষণ পথ পাওয়া যায়নি",
253+
"import.notewizard.error.cancelled": "ব্যবহারকারী আমদানি বাতিল করেছেন",
254+
"import.notewizard.error.invalidPackage": "অবৈধ রপ্তানি প্যাকেজ: manifest.json ফাইল নেই",
255+
"import.notewizard.error.noNodes": "অবৈধ রপ্তানি প্যাকেজ: nodes.jsonl ফাইল নেই",
256+
"import.notewizard.error.invalidManifest": "manifest.json ফর্ম্যাট ত্রুটি",
257+
"import.notewizard.success.title": "আমদানি সফল",
258+
"import.notewizard.success.message": "{count}টি NoteWizard ফর্ম্যাট নোট সফলভাবে আমদানি করা হয়েছে",
259+
"import.notewizard.success.breakdown": "কর্মক্ষেত্র নোট: {active}টি\nট্র্যাশ নোট: {trashed}টি",
260+
"import.notewizard.success.conflicts": "{count}টি নোট দ্বন্দ্বের কারণে স্বয়ংক্রিয়ভাবে নাম পরিবর্তন করা হয়েছে",
261+
"import.notewizard.success.skipped": "{count}টি সদৃশ বিষয়বস্তুর নোট এড়িয়ে যাওয়া হয়েছে",
262+
"import.notewizard.error.title": "আমদানি ব্যর্থ",
263+
"import.markdown.dialog.title": "Markdown ফাইল নির্বাচন করুন",
264+
"import.markdown.success.title": "আমদানি সফল",
265+
"import.markdown.success.message": "{count}টি Markdown ফর্ম্যাট নোট সফলভাবে আমদানি করা হয়েছে",
266+
"import.markdown.error.title": "আমদানি ব্যর্থ",
267+
"import.markdown.error.noWorkspace": "নোট সংরক্ষণ পথ পাওয়া যায়নি",
268+
"import.markdown.error.cancelled": "ব্যবহারকারী আমদানি বাতিল করেছেন",
269+
"btnExportNotes": "নোট রপ্তানি করুন",
270+
"btnImportNotes": "নোট আমদানি করুন"
187271
}

0 commit comments

Comments
 (0)