abhi2400's picture
Upload folder using huggingface_hub
04f98c3 verified
document.addEventListener('DOMContentLoaded', function() {
const form = document.getElementById('translationForm');
const pdfFileInput = document.getElementById('pdfFile');
const targetLanguageSelect = document.getElementById('targetLanguage');
const translatedTextOutput = document.getElementById('translatedText');
const downloadButton = document.getElementById('downloadButton');
// Populate language dropdown
const languages = {
'af': 'Afrikaans',
'sq': 'Albanian',
'am': 'Amharic',
'ar': 'Arabic',
'hy': 'Armenian',
'az': 'Azerbaijani',
'eu': 'Basque',
'be': 'Belarusian',
'bn': 'Bengali',
'bs': 'Bosnian',
'bg': 'Bulgarian',
'ca': 'Catalan',
'ceb': 'Cebuano',
'ny': 'Chichewa',
'zh-cn': 'Chinese (Simplified)',
'zh-tw': 'Chinese (Traditional)',
'co': 'Corsican',
'hr': 'Croatian',
'cs': 'Czech',
'da': 'Danish',
'nl': 'Dutch',
'en': 'English',
'eo': 'Esperanto',
'et': 'Estonian',
'tl': 'Filipino',
'fi': 'Finnish',
'fr': 'French',
'fy': 'Frisian',
'gl': 'Galician',
'ka': 'Georgian',
'de': 'German',
'el': 'Greek',
'gu': 'Gujarati',
'ht': 'Haitian Creole',
'ha': 'Hausa',
'haw': 'Hawaiian',
'iw': 'Hebrew',
'hi': 'Hindi',
'hmn': 'Hmong',
'hu': 'Hungarian',
'is': 'Icelandic',
'ig': 'Igbo',
'id': 'Indonesian',
'ga': 'Irish',
'it': 'Italian',
'ja': 'Japanese',
'jw': 'Javanese',
'kn': 'Kannada',
'kk': 'Kazakh',
'km': 'Khmer',
'rw': 'Kinyarwanda',
'ko': 'Korean',
'ku': 'Kurdish (Kurmanji)',
'ky': 'Kyrgyz',
'lo': 'Lao',
'la': 'Latin',
'lv': 'Latvian',
'lt': 'Lithuanian',
'lb': 'Luxembourgish',
'mk': 'Macedonian',
'mg': 'Malagasy',
'ms': 'Malay',
'ml': 'Malayalam',
'mt': 'Maltese',
'mi': 'Maori',
'mr': 'Marathi',
'mn': 'Mongolian',
'my': 'Myanmar (Burmese)',
'ne': 'Nepali',
'no': 'Norwegian',
'or': 'Odia (Oriya)',
'ps': 'Pashto',
'fa': 'Persian',
'pl': 'Polish',
'pt': 'Portuguese',
'pa': 'Punjabi',
'ro': 'Romanian',
'ru': 'Russian',
'sm': 'Samoan',
'gd': 'Scots Gaelic',
'sr': 'Serbian',
'st': 'Sesotho',
'sn': 'Shona',
'sd': 'Sindhi',
'si': 'Sinhala',
'sk': 'Slovak',
'sl': 'Slovenian',
'so': 'Somali',
'es': 'Spanish',
'su': 'Sundanese',
'sw': 'Swahili',
'sv': 'Swedish',
'tg': 'Tajik',
'ta': 'Tamil',
'tt': 'Tatar',
'te': 'Telugu',
'th': 'Thai',
'tr': 'Turkish',
'tk': 'Turkmen',
'uk': 'Ukrainian',
'ur': 'Urdu',
'ug': 'Uyghur',
'uz': 'Uzbek',
'vi': 'Vietnamese',
'cy': 'Welsh',
'xh': 'Xhosa',
'yi': 'Yiddish',
'yo': 'Yoruba',
'zu': 'Zulu'
};
for (const code in languages) {
const option = document.createElement('option');
option.value = code;
option.textContent = languages[code];
targetLanguageSelect.appendChild(option);
}
reader.onload = function(e) {
const arrayBuffer = e.target.result;
extractTextFromPDF(arrayBuffer)
.then(text => translateText(text, targetLanguage))
.then(translatedText => {
translatedTextOutput.value = translatedText;
createPDF(translatedText)
.then(pdfBlob => {
const url = URL.createObjectURL(pdfBlob);
downloadButton.href = url;
downloadButton.download = 'translated_document.pdf';
downloadButton.style.display = 'block'; // Show the button
downloadButton.addEventListener('click', function() {
// Automatically revoke the object URL once clicked
URL.revokeObjectURL(url);
});
});
});
};
form.addEventListener('submit', function(event) {
event.preventDefault();
const file = pdfFileInput.files[0];
const targetLanguage = targetLanguageSelect.value;
if (!file || !targetLanguage) {
alert('Please select a file and a target language.');
return;
}
const reader = new FileReader();
reader.onload = function(e) {
const arrayBuffer = e.target.result;
extractTextFromPDF(arrayBuffer)
.then(text => translateText(text, targetLanguage))
.then(translatedText => {
translatedTextOutput.value = translatedText;
createPDF(translatedText)
.then(pdfBlob => {
const url = URL.createObjectURL(pdfBlob);
downloadButton.href = url;
downloadButton.download = 'translated_document.pdf';
downloadButton.style.display = 'block';
});
});
};
reader.readAsArrayBuffer(file);
});
function extractTextFromPDF(arrayBuffer) {
return pdfjsLib.getDocument({ data: arrayBuffer }).promise.then(pdf => {
const maxPages = pdf.numPages;
const pagePromises = [];
for (let j = 1; j <= maxPages; j++) {
pagePromises.push(pdf.getPage(j).then(page => page.getTextContent()));
}
return Promise.all(pagePromises).then(pages => {
return pages.map(page => page.items.map(item => item.str).join(' ')).join('\n');
});
});
}
function translateText(text, targetLanguage) {
return fetch('https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=' + targetLanguage + '&dt=t&q=' + encodeURIComponent(text))
.then(response => response.json())
.then(data => {
return data[0].map(item => item[0]).join('');
});
}
function createPDF(text) {
const { jsPDF } = window.jspdf;
const pdf = new jsPDF();
const lines = pdf.splitTextToSize(text, 180);
pdf.text(10, 10, lines);
return pdf.output('blob');
}
});