scripts/translator.js (53 lines of code) (raw):

// Get crowdin contributor information var fs = require('fs'); var path = require('path'); var outputFile = path.resolve(__dirname, '../static/data/team.json'); // crowdin token var TOKEN = ''; // Crowdin API config var CROWDIN_PROJECTS = [ { id: '546268', name: 'answer', }, { id: '624686', name: 'answer-website' }, ]; async function getCrowdinContributors(token) { let allContributors = []; for (const { id, name } of CROWDIN_PROJECTS) { const url = `https://api.crowdin.com/api/v2/projects/${id}/members`; const response = await fetch(url, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` } }); if (!response.ok) { throw new Error(`HTTP error ${response.status} for project ${name}`); } const { data: contributors } = await response.json(); allContributors = allContributors.concat(contributors.map(contributor => ({ name: contributor.data.username, github: `https://crowdin.com/profile/${contributor.data.username}`, avatar: contributor.data.avatarUrl }))).sort(function(a, b) { return a.name.localeCompare(b.name); });; } // Deduplicate contributors return [...new Set(allContributors.map(JSON.stringify))].map(JSON.parse); } async function saveContributorsToFile() { try { const contributors = await getCrowdinContributors(TOKEN); console.log(`Total contributors: ${contributors.length}`); // Read existing JSON data const existingData = fs.readFileSync(outputFile, 'utf8'); const jsonData = JSON.parse(existingData); jsonData[3].count = contributors.length; jsonData[3].users = contributors; // Save data to team.json fs.writeFileSync(outputFile, JSON.stringify(jsonData, null, 2)); console.log(`Contributors information saved to ${outputFile}`); } catch (err) { console.error('Error:', err); } } saveContributorsToFile();