Spaces:
Running
Running
import streamlit as st | |
import google.generativeai as genai | |
from db.mongodb import detect_file_type | |
from powerpoint.pptx import translate_pptx | |
from excel.xlsx import translate_xlsx | |
from excel.excel_translate import translate_csv | |
from word.word_helper import translate_docx | |
import dotenv | |
import os | |
from datetime import datetime, timedelta | |
dotenv.load_dotenv(".env") | |
genai.configure(api_key=os.getenv("GEMINI_API_KEY")) | |
# Cấu hình giao diện | |
st.set_page_config(page_title="Translate Your File", page_icon="🌍", layout="centered") | |
# CSS custom | |
st.markdown(""" | |
<style> | |
body { | |
background-color: #ffffff; | |
color: #333333; | |
} | |
.main { | |
background-color: #ffffff; | |
color: #333333; | |
} | |
h1, h2, h3 { | |
color: #007acc; | |
text-align: center; | |
} | |
.stButton>button { | |
background-color: #007acc; | |
color: white; | |
border-radius: 10px; | |
padding: 0.75em 2em; | |
font-size: 1.1em; | |
border: none; | |
transition: 0.3s; | |
} | |
.stButton>button:hover { | |
background-color: #005f99; | |
color: white; | |
} | |
.stFileUploader { | |
border: 2px dashed #007acc; | |
padding: 20px; | |
border-radius: 10px; | |
text-align: center; | |
background-color: #f9f9f9; | |
} | |
div[data-baseweb="select"] > div { | |
background-color: white !important; | |
color: black !important; | |
border-radius: 8px; | |
} | |
.stSelectbox label { | |
margin-bottom: 0.2rem; | |
font-weight: bold; | |
color: #333333; | |
} | |
footer {visibility: hidden;} | |
</style> | |
""", unsafe_allow_html=True) | |
# Upload file | |
with st.container(): | |
st.markdown("### 📂 Chọn file để dịch") | |
uploaded_file = st.file_uploader("Kéo thả hoặc chọn file", type=['pptx', 'xlsx', 'csv', 'docx']) | |
# Lựa chọn ngôn ngữ | |
with st.container(): | |
col1, col2 = st.columns(2) | |
with col1: | |
st.markdown('<p style="font-size:16px; font-weight:bold; margin-bottom:4px;">🌐 Ngôn ngữ của tài liệu</p>', unsafe_allow_html=True) | |
source_lang = st.selectbox(" ", ["Để máy tự xác định", "chinese", "english", "vietnamese", "japanese"], key="source_lang") | |
with col2: | |
st.markdown('<p style="font-size:16px; font-weight:bold; margin-bottom:4px;">🌐 Ngôn ngữ muốn dịch sang</p>', unsafe_allow_html=True) | |
target_lang = st.selectbox(" ", ["vietnamese", "chinese", "english", "japanese"], key="target_lang") | |
# Xử lý file trực tiếp | |
def process_file(file, file_type): | |
progress_bar = st.progress(0) | |
file_name = file.name | |
progress_bar.progress(10) | |
with st.spinner("🔍 Đang xử lý và dịch tài liệu..."): | |
if file_type == "PPTX": | |
output_io, output_name = translate_pptx(file, file_name, source_lang=source_lang, target_lang=target_lang) | |
elif file_type == "Excel": | |
output_io, output_name = translate_xlsx(file, file_name, source_lang=source_lang, target_lang=target_lang) | |
elif file_type == "CSV": | |
output_io, output_name = translate_csv(file, file_name, source_lang=source_lang, target_lang=target_lang) | |
elif file_type == "Word": | |
output_io, output_name = translate_docx(file, file_name, source_lang=source_lang, target_lang=target_lang) | |
else: | |
st.error("❌ Loại file không hỗ trợ!") | |
return | |
progress_bar.progress(100) | |
if output_io: | |
st.success("🎉 File đã được dịch thành công!") | |
print(f"✅ File đã dịch: {output_name}") | |
st.download_button("⬇️ Tải file về", data=output_io.getvalue(), file_name=output_name) | |
end_time = datetime.now() + timedelta(hours=5) | |
print(f"🕒 Thời gian upload: {end_time.strftime('%Y-%m-%d %H:%M:%S')}") | |
else: | |
st.error("❌ Xảy ra lỗi khi xử lý file.") | |
# Nút xử lý | |
if uploaded_file and st.button("🚀 Upload và dịch ngay!"): | |
upload_time = datetime.now() + timedelta(hours=5) | |
print("=" * 100) | |
print(f"🕒 Thời gian upload: {upload_time.strftime('%Y-%m-%d %H:%M:%S')}") | |
st.write(f"🕒 **Thời gian upload (UTC+5):** `{upload_time.strftime('%Y-%m-%d %H:%M:%S')}`") | |
with st.spinner("🔎 Đang phát hiện loại file..."): | |
file_type = detect_file_type(uploaded_file) | |
st.write(f"🔍 **Loại file phát hiện:** `{file_type}`") | |
process_file(uploaded_file, file_type) | |