GIRI45's picture
Update app.py
0f04a25 verified
Raw
History Blame Contribute Delete
2.36 kB
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
@app.route("/", methods=["GET", "POST"])
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)