Online Bilingual Text Alignment Tool

Bilingual Text Alignment Tool

Align two texts sentence-by-sentence for translation analysis and comparison.

Aligned Sentences

Your aligned text will appear here.

Please provide text for both languages.

'; return; } // Simple sentence splitting based on punctuation. const sourceSentences = sourceText.match(/[^.!?]+[.!?]+/g) || [sourceText]; const targetSentences = targetText.match(/[^.!?]+[.!?]+/g) || [targetText]; const alignment = []; const maxLength = Math.max(sourceSentences.length, targetSentences.length); for (let i = 0; i < maxLength; i++) { alignment.push({ source: sourceSentences[i] || '', target: targetSentences[i] || '' }); } lastAlignment = { sourceLang: sourceLangLabelInput.value, targetLang: targetLangLabelInput.value, data: alignment }; renderAlignmentTable(lastAlignment); }; const renderAlignmentTable = (alignmentData) => { let tableHTML = ` `; alignmentData.data.forEach(pair => { tableHTML += ` `; }); tableHTML += '
${alignmentData.sourceLang} ${alignmentData.targetLang}
${pair.source.trim()} ${pair.target.trim()}
'; resultsContainer.innerHTML = tableHTML; }; // --- EVENT LISTENERS --- alignBtn.addEventListener('click', alignTexts); // --- PDF DOWNLOAD --- downloadPdfBtn.addEventListener('click', () => { if (!lastAlignment) { alert("Please align texts before downloading."); return; } const { jsPDF } = window.jspdf; const doc = new jsPDF(); doc.setFontSize(22); doc.text('Bilingual Text Alignment', 105, 20, { align: 'center' }); const tableData = lastAlignment.data.map(pair => [pair.source.trim(), pair.target.trim()]); doc.autoTable({ head: [[lastAlignment.sourceLang, lastAlignment.targetLang]], body: tableData, startY: 30, theme: 'grid', styles: { cellPadding: 3, fontSize: 9, overflow: 'linebreak' } }); doc.save('text-alignment.pdf'); }); });
Scroll to Top