@bmat/translation-management
Version:
Manage Front-End translations from multiple sources
1 lines • 2.55 kB
JavaScript
;var __awaiter=this&&this.__awaiter||function(thisArg,_arguments,P,generator){return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator['throw'](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):new P(function(resolve){resolve(result.value);}).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});};Object.defineProperty(exports,'__esModule',{value:true});const fs=require('fs');const xmldom_1=require('xmldom');const xliff_1=require('../../constants/xliff');const from_i18n_json_to_xliff_file_1=require('../../conversors/from-i18n-json-to-xliff-file');const xml_entities_1=require('../../factories/xml-entities');function mergeMasterFiles(masterPaths,{sourceLanguage,targetLanguage}={sourceLanguage:'en-GB',targetLanguage:'en-GB'}){return __awaiter(this,void 0,void 0,function*(){const parser=new xmldom_1.DOMParser();const implementation=new xmldom_1.DOMImplementation();const parseableExtensions=/\.(json|xlf)$/;const document=implementation.createDocument(xliff_1.NAMESPACE,null,null);const rootEle=new xml_entities_1.XLIFFTag({}).toXML(document);try{const fileTagsFromMasters=yield Promise.all(masterPaths.map(path=>{return new Promise((resolve,reject)=>{fs.readFile(path,{encoding:'utf-8'},(err,data)=>{if(err){return reject(err);}const extensionSearch=parseableExtensions.exec(path);const ext=extensionSearch?extensionSearch[1]:'';const retFiles=[];switch(ext){case'xlif':case'xlf':try{const parsed=parser.parseFromString(data);const fileTags=parsed.getElementsByTagNameNS(xliff_1.NAMESPACE,'file');for(let i=0;i<fileTags.length;i+=1){const file=fileTags[i];const fileTargetLanguage=file.getAttributeNS(xliff_1.NAMESPACE,'target-language');if(!fileTargetLanguage){file.setAttributeNS(xliff_1.NAMESPACE,'target-language',targetLanguage);}retFiles.push(file);}}catch(e){return reject(e);}break;case'json':try{const parsedJson=from_i18n_json_to_xliff_file_1.fromI18nJsonToXliffFile({sourceLanguage,targetLanguage,data:JSON.parse(data),filePath:path});retFiles.push(parsedJson.toXML());}catch(e){return reject(e);}break;default:return reject('Ignoring file %s: unknown type'+path);}resolve(retFiles);});});}));fileTagsFromMasters.forEach(fileTagArr=>fileTagArr.forEach(fileTag=>rootEle.appendChild(fileTag)));document.appendChild(rootEle);return document;}catch(e){return Promise.reject(e);}});}exports.mergeMasterFiles=mergeMasterFiles;