UNPKG

@bmat/translation-management

Version:

Manage Front-End translations from multiple sources

1 lines 2.21 kB
'use strict';Object.defineProperty(exports,'__esModule',{value:true});const xliff_1=require('../../constants/xliff');const extract_translation_units_1=require('../../extractors/extract-translation-units');const xliff_12_factory_1=require('../../factories/xliff-12-factory');const merge_translation_unit_1=require('../merge-translation-unit');function fileTagId(file){const original=file.getAttributeNS(xliff_1.NAMESPACE,'original');const sourceLanguage=file.getAttributeNS(xliff_1.NAMESPACE,'source-language');const datatype=file.getAttributeNS(xliff_1.NAMESPACE,'datatype');return`original:${original}|source-language:${sourceLanguage}:datatype:${datatype}`;}function updateTranslations(master,oldDoc){const oldDocFilesMap=new Map();const oldDocFilesNodeList=oldDoc.getElementsByTagNameNS(xliff_1.NAMESPACE,'file');for(let i=0;i<oldDocFilesNodeList.length;i+=1){oldDocFilesMap.set(fileTagId(oldDocFilesNodeList[i]),oldDocFilesNodeList[i]);}const newDoc=xliff_12_factory_1.xliff12Factory('en','',false);const newRoot=newDoc.getElementsByTagNameNS(xliff_1.NAMESPACE,'xliff')[0];const masterFiles=master.getElementsByTagNameNS(xliff_1.NAMESPACE,'file');for(let i=0;i<masterFiles.length;i+=1){const oldFile=oldDocFilesMap.get(fileTagId(masterFiles[i]));if(oldFile){const masterBody=masterFiles[i].getElementsByTagNameNS(xliff_1.NAMESPACE,'body')[0];const oldFileBody=oldFile.getElementsByTagNameNS(xliff_1.NAMESPACE,'body')[0];const masterTransUnits=extract_translation_units_1.extractTranslationUnits(masterBody);const oldFileTransUnits=extract_translation_units_1.extractTranslationUnits(oldFileBody);const newTransUnits=[];for(const [key,val]of masterTransUnits){const oldTrans=oldFileTransUnits.get(key);if(oldTrans){newTransUnits.push(merge_translation_unit_1.mergeTranslationUnit(master,val,oldTrans));}else{newTransUnits.push(val.cloneNode(true));}}const clone=masterFiles[i].cloneNode(false);const cloneBody=newDoc.createElementNS(xliff_1.NAMESPACE,'body');newTransUnits.forEach(transUnit=>cloneBody.appendChild(transUnit));clone.appendChild(cloneBody);newRoot.appendChild(clone);}else{newRoot.appendChild(masterFiles[i].cloneNode(true));}}return newDoc;}exports.updateTranslations=updateTranslations;