Spaces:
Sleeping
Sleeping
| import chardet | |
| import fitz # PyMuPDF for PDFs | |
| from docx import Document # For DOCX files | |
| from flask import Flask, render_template, request | |
| from googletrans import Translator, LANGUAGES | |
| from striprtf.striprtf import rtf_to_text # Convert RTF to plain text | |
| app = Flask(__name__) | |
| translator = Translator() | |
| def detect_encoding(file): | |
| """Detects the encoding of a given file.""" | |
| raw_data = file.read() | |
| result = chardet.detect(raw_data) | |
| encoding = result.get('encoding') or 'utf-8' # Default to UTF-8 if detection fails | |
| file.seek(0) # Reset file pointer for reading | |
| return encoding | |
| def extract_text(file, filename, encoding): | |
| """Extracts plain text from TXT, RTF, DOCX, and PDF files.""" | |
| if filename.endswith(".txt"): | |
| return file.read().decode(encoding, errors="replace").strip() | |
| elif filename.endswith(".rtf"): | |
| contents = file.read().decode(encoding, errors="replace").strip() | |
| return rtf_to_text(contents) | |
| elif filename.endswith(".docx"): | |
| doc = Document(file) | |
| return "\n".join([para.text for para in doc.paragraphs]).strip() | |
| elif filename.endswith(".pdf"): | |
| pdf_document = fitz.open(stream=file.read(), filetype="pdf") | |
| text = "\n".join([page.get_text("text") for page in pdf_document]) | |
| return text.strip() | |
| else: | |
| return None # Unsupported file type | |
| def translate_file(): | |
| translated_text = "" | |
| if request.method == "POST": | |
| file = request.files.get("file") | |
| target_language = request.form.get("target_language", "en") | |
| if not file or file.filename == "": | |
| return "Error: No file selected." | |
| try: | |
| encoding = detect_encoding(file) | |
| contents = extract_text(file, file.filename, encoding) | |
| if not contents: | |
| return "Error: Unsupported file type or empty file." | |
| translated = translator.translate(contents, dest=target_language) | |
| translated_text = translated.text if translated and translated.text else "Translation failed." | |
| except Exception as e: | |
| translated_text = f"Error during translation: {str(e)}" | |
| return render_template("index.html", translated_text=translated_text, languages=LANGUAGES) | |
| if __name__ == "__main__": | |
| app.run(debug=True) |