Spaces:
Running
Running
File size: 4,591 Bytes
0e9ff78 73196e5 4d84219 804add3 ce94f1c 0e9ff78 a17bcfd bdcb5e5 a17bcfd bdcb5e5 73196e5 bdcb5e5 a17bcfd bdcb5e5 a17bcfd bdcb5e5 a17bcfd bdcb5e5 a17bcfd bdcb5e5 a17bcfd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import streamlit as st
import google.generativeai as genai
from db.mongodb import save_file_to_mongodb, fetch_file_from_mongodb, 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
dotenv.load_dotenv(".env")
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
# Cấu hình trang
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;
}
/* Thu hẹp khoảng cách giữa label và selectbox */
.stSelectbox label {
margin-bottom: 0.2rem;
font-weight: bold;
color: #333333;
}
footer {visibility: hidden;}
</style>
""", unsafe_allow_html=True)
# Upload file section
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'])
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(" ", ["english", "vietnamese"], 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(" ", ["english", "vietnamese"], key="target_lang")
def process_file(file, file_type):
progress_bar = st.progress(0)
with st.spinner("🔄 Đang lưu file lên hệ thống..."):
file_id, file_name = save_file_to_mongodb(uploaded_file=file, db_name=file_type.lower(), collection_name="root_file")
progress_bar.progress(20)
st.write(f"📂 **File ID:** `{file_id}`")
with st.spinner("🔍 Đang xử lý và dịch tài liệu..."):
if file_type == "PPTX":
final_id = translate_pptx(file_id, file_name, source_lang=source_lang, target_lang=target_lang, slides_per_batch=5)
progress_bar.progress(60)
elif file_type == "Excel":
final_id = translate_xlsx(file_id=file_id, file_name=file_name, source_lang=source_lang, target_lang=target_lang)
elif file_type == "CSV":
final_id = translate_csv(file_id=file_id, source_lang=source_lang, target_lang=target_lang)
elif file_type == "Word":
final_id = translate_docx(file_id=file_id, file_name=file_name, source_lang=source_lang, target_lang=target_lang)
else:
st.error("❌ Loại file không hỗ trợ!")
return
progress_bar.progress(80)
with st.spinner("📦 Đang tải file đã dịch..."):
file_io, file_name = fetch_file_from_mongodb(file_type.lower(), "final_file", final_id)
progress_bar.progress(100)
if file_io:
st.success("🎉 File đã được dịch thành công!")
st.download_button("⬇️ Tải file về", data=file_io.getvalue(), file_name=file_name)
else:
st.error("❌ Không thể tải xuống file. Vui lòng thử lại!")
if uploaded_file and st.button("🚀 Upload và dịch ngay!"):
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)
|