mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
修复windows下路径的问题,添加设置项,完善翻译
This commit is contained in:
1 parent
5980080302
commit
6ad41dc2ae
29 files changed
+368
-278
No files matched your search
+57
-21
@@ -1,3 +1,4 @@
|
||||
/* eslint-disable no-eval */
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const yaml = require('js-yaml');
|
||||
@@ -8,42 +9,77 @@ const IGNORE_CHECK = ['en'];
|
||||
const IGNORE_MISSING = [
|
||||
'?', 'AC', 'Gravatar', 'ID', 'MD5', 'URL',
|
||||
];
|
||||
const RE_TEXT = /_\(['"]([\s\S])*?['"]\)/gmi;
|
||||
const RE_TEMPLATE = /_\(['"]([\s\S])*?['"]\)/gmi;
|
||||
const RE_UI = /i18n\(['"]([\s\S])*?['"](,.*?)?\)/gmi;
|
||||
const TEMPLATE_ROOT = path.resolve(__dirname, '..', 'templates');
|
||||
const LOCALE_ROOT = path.resolve(__dirname, '..', 'locales');
|
||||
|
||||
const UI_ROOT = path.resolve(__dirname, '..', 'ui');
|
||||
const IGNORE_NAME = ['node_modules'];
|
||||
const texts = {};
|
||||
const result = {};
|
||||
const locales = fs.readdirSync(LOCALE_ROOT);
|
||||
let currentFile = '';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
function _(str) {
|
||||
function _(str, format) {
|
||||
if (!texts[str]) texts[str] = [currentFile];
|
||||
else texts[str].push(currentFile);
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const i18n = _;
|
||||
|
||||
function scan(folder, relative = '') {
|
||||
function scanTemplate(folder, relative = 'templates') {
|
||||
const files = fs.readdirSync(folder);
|
||||
for (const file of files) {
|
||||
const p = path.join(folder, file);
|
||||
if (fs.statSync(p).isDirectory()) {
|
||||
scan(p, path.join(relative, file));
|
||||
} else {
|
||||
currentFile = path.join(relative, file);
|
||||
const f = fs.readFileSync(p).toString();
|
||||
f.replace(RE_TEXT, (substr) => {
|
||||
try {
|
||||
// eslint-disable-next-line no-eval
|
||||
eval(substr);
|
||||
} catch (e) {
|
||||
console.error('Cannot parse: ', substr, ' in file ', p);
|
||||
}
|
||||
});
|
||||
if (!IGNORE_NAME.includes(file)) {
|
||||
const p = path.join(folder, file);
|
||||
if (fs.statSync(p).isDirectory()) {
|
||||
scanTemplate(p, path.join(relative, file));
|
||||
} else {
|
||||
currentFile = path.join(relative, file);
|
||||
const f = fs.readFileSync(p).toString();
|
||||
f.replace(RE_TEMPLATE, (substr) => {
|
||||
try {
|
||||
// eslint-disable-next-line no-eval
|
||||
eval(substr);
|
||||
} catch (e) {
|
||||
console.error('Cannot parse: ', substr, ' in file ', p);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scan(TEMPLATE_ROOT);
|
||||
const result = {};
|
||||
const locales = fs.readdirSync(LOCALE_ROOT);
|
||||
function scanUi(folder, relative = 'ui') {
|
||||
const files = fs.readdirSync(folder);
|
||||
for (const file of files) {
|
||||
if (!IGNORE_NAME.includes(file)) {
|
||||
const p = path.join(folder, file);
|
||||
if (fs.statSync(p).isDirectory()) {
|
||||
scanUi(p, path.join(relative, file));
|
||||
} else {
|
||||
currentFile = path.join(relative, file);
|
||||
const f = fs.readFileSync(p).toString();
|
||||
f.replace(RE_UI, (substr) => {
|
||||
try {
|
||||
eval(substr);
|
||||
} catch (e) {
|
||||
if (e.message.endsWith('is not defined')) {
|
||||
global[e.message.split(' ')[0]] = undefined;
|
||||
try {
|
||||
eval(substr);
|
||||
} catch (err) {
|
||||
console.error('Cannot parse: ', substr, ' in file ', p);
|
||||
}
|
||||
} else console.error('Cannot parse: ', substr, ' in file ', p);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
scanTemplate(TEMPLATE_ROOT);
|
||||
scanUi(UI_ROOT);
|
||||
if (!name) {
|
||||
for (const locale of locales) {
|
||||
if (!IGNORE_CHECK.includes(locale.split('.')[0])) {
|
||||
|
||||
Reference in new issue
Block a user