srt-translator / app.py
teoo33's picture
Update app.py
b00b999 verified
import gradio as gr
import google.generativeai as genai
import re
import os
import time
# تنظیم API Key
API_KEY = os.getenv("GEMINI_API_KEY") # کلیدت رو اینجا بذار یا از Secrets
genai.configure(api_key=API_KEY)
model = genai.GenerativeModel("gemini-1.5-flash")
def translate_with_gemini(text):
if not text.strip():
print("Text is empty, returning empty string")
return ""
print(f"Starting translation for: '{text}' at {time.ctime()}")
start_time = time.time()
try:
prompt = f"Translate this to Persian: {text}"
response = model.generate_content(prompt)
translated = response.text
elapsed_time = time.time() - start_time
print(f"Translated to: '{translated}' (took {elapsed_time:.2f} seconds)")
return translated
except Exception as e:
error_msg = f"خطا در ترجمه: {str(e)} (after {time.time() - start_time:.2f} seconds)"
print(error_msg)
return error_msg
def process_srt(file):
encodings = ['utf-8', 'windows-1252', 'latin1']
content = None
for encoding in encodings:
try:
with open(file.name, 'r', encoding=encoding) as f:
content = f.read()
print(f"File read with encoding: {encoding}")
break
except UnicodeDecodeError:
continue
if content is None:
raise ValueError("نمی‌تونم فایل رو با انکودینگ‌های رایج بخونم. لطفاً فایل رو با UTF-8 ذخیره کن.")
blocks = re.split(r'\n\n', content.strip())
print(f"Found {len(blocks)} blocks in SRT")
subtitles = ["خروجی‌ها توسط هوش مصنوعی انجام شده\n"]
for i, block in enumerate(blocks):
print(f"Processing block {i + 1}/{len(blocks)}")
lines = block.split('\n')
if len(lines) >= 2:
index = lines[0].strip()
timing = lines[1].strip()
text = '\n'.join(lines[2:]).strip()
translated_text = translate_with_gemini(text)
subtitles.append(f"{index}\n{timing}\n{translated_text}")
output_content = '\n\n'.join(subtitles)
output_path = "translated_srt.srt"
with open(output_path, 'w', encoding='utf-8') as f:
f.write(output_content)
print("File written successfully")
return output_path
interface = gr.Interface(
fn=process_srt,
inputs=gr.File(label="فایل SRT انگلیسی رو آپلود کن"),
outputs=gr.File(label="فایل SRT ترجمه‌شده به فارسی"),
title="ترجمه زیرنویس با Gemini API",
description="فایل SRT انگلیسی رو آپلود کن تا به فارسی ترجمه بشه."
)
interface.launch()