提取项目中的中文字符串并翻译成英文输出

const fs = require('fs');
const https = require('https');
const path = require('path');

const api_url = "https://translate.googleapis.com/translate_a/single?client=gtx";
const source_language = "zh-CN";
const target_language = "en";

const target_directories = [
    __dirname, // 当前目录
    path.join(__dirname, 'views'),
    path.join(__dirname, 'scripts')
];

const chinese_pattern = /[\u4e00-\u9fff]+/g;

function translateText(text) {
    return new Promise((resolve, reject) => {
        const url = `${api_url}&sl=${source_language}&tl=${target_language}&dt=t&q=${encodeURIComponent(text)}`;
        https.get(url, (response) => {
            let responseData = '';
            response.on('data', (chunk) => {
                responseData += chunk;
            });
            response.on('end', () => {
                const translatedText = JSON.parse(responseData)[0][0][0];
                console.log(translatedText)
                resolve(translatedText);
            });
        }).on('error', (error) => {
            console.log('------error------');
            console.log(error);
            reject(error);
        });
    });
}

function processFiles(directory) {
    let translations = {};

    fs.readdirSync(directory).forEach(file => {
        const filePath = path.join(directory, file);

        if (fs.statSync(filePath).isFile()) {
            if (file.endsWith('.html') || file.endsWith('.js')) {
                const content = fs.readFileSync(filePath, 'utf-8');
                const matches = content.match(chinese_pattern);

                if (matches) {
                    matches.forEach(match => {
                        if (!isInsideComment(content, match)) {
                            translations[match] = ''; // Initialize with an empty value
                        }
                    });
                }
            }
        } else if (fs.statSync(filePath).isDirectory()) {
            translations = { ...translations, ...processFiles(filePath) };
        }
    });

    return translations;
}
function getCommentRanges(content) {
    const commentPatterns = [
        [/\/\/[^\n]*\b(\S*?)(?= range[0] && position <= range[1]) {
            return true;
        }
    }

    return false;
}

(async () => {
    let translatedStrings = {};

    for (const directory of target_directories) {
        translatedStrings = { ...translatedStrings, ...processFiles(directory) };
    }

    for (const chineseString of Object.keys(translatedStrings)) {
        translatedStrings[chineseString] = await translateText(chineseString);
    }

    const outputPath = path.join(__dirname, 'i18n', 'translate.json');
    fs.writeFileSync(outputPath, JSON.stringify(translatedStrings, null, 2));

    console.log(`已生成翻译文件:${outputPath}`);
})();

你可能感兴趣的:(node,node.js)