Created
February 9, 2018 11:41
-
-
Save softlion/02fab2672a135ba2e76fc3b4568fb3b1 to your computer and use it in GitHub Desktop.
poeditor: export all projects/languages to resx files (or any format)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Install nodejs and the npm dependencies: | |
//npm install node-poeditor | |
//npm install async-file | |
//npm install linq-es2015 | |
//npm install requisition | |
// | |
//run: | |
//node poeditor-export.js | |
const token = 'you-api-token-here'; | |
const poconnect = require('node-poeditor'); | |
const fs = require('async-file'); | |
const Enumerable = require('linq-es2015'); | |
const req = require('requisition'); | |
const path = require('path'); | |
//Name of projects to export. exportName will be the name of the exported file (without extension) | |
//All languages of these projects will be exported | |
const projectSettings = [ | |
{name:'Cosmo texts.resx', exportName:'Texts'}, | |
{name:'Cosmo InfoPlist.resx', exportName:'InfoPlist'}, | |
{name:'Cosmo.SMS.Emails.Links', exportName:'Links'}, | |
]; | |
//Default language reference | |
const rootLanguage = 'en'; | |
//Output folder | |
const rootFolder = 'translations'; | |
const exportParameters = { | |
language: 'en', | |
type: 'resx', | |
//tags: '["someTag"]', | |
//filters: '["someFilter"]' | |
}; | |
async function extractProject(project, settings) | |
{ | |
console.log("Extracting " + project.name) | |
//Loop through languages | |
var projectLanguages = (await poconnect.languages.list(token, project.id)).languages; | |
var promises = []; | |
for(language of projectLanguages) { | |
var exportParams = Object.assign({}, exportParameters, {language: language.code}); | |
var exportUrl = (await poconnect.projects.export(token, project.id, exportParams)).url; | |
// download and save file | |
//path.join(); | |
var filename = language.code != rootLanguage ? settings.exportName + '.' + language.code + '.resx' : settings.exportName + '.resx'; | |
filename = path.join(rootFolder, filename); | |
await downloadOverwiteFile(exportUrl, filename); | |
//promises.push(await downloadOverwiteFile(exportUrl, filename)); //PO API dl the wrong language ! | |
}; | |
await Promise.all(promises); | |
} | |
async function downloadOverwiteFile(url, filename) | |
{ | |
console.log('downloading ' + filename); | |
var response = await req(url); | |
await response.saveTo(filename); | |
response.destroy(); | |
} | |
(async () => { | |
try { | |
console.log('starting!'); | |
var projects = (await poconnect.projects.list(token)).projects; | |
console.log('examining ' + projects.length + ' projects'); | |
var projectNames = Enumerable.from(projectSettings).Select(p => p.name).ToArray(); | |
var promises = []; | |
for(var project of projects) | |
{ | |
var settings = Enumerable.from(projectSettings).FirstOrDefault(p => p.name == project.name); | |
if(settings != null) | |
await extractProject(project, settings); | |
//promises.push(extractProject(project, settings)); //Parallel call (no await) | |
} | |
await Promise.all(promises); | |
console.log('finished!'); | |
} catch (err) { | |
console.log(err); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment