import os
import gradio as gr
from openai import OpenAI
# 初始化 OpenAI 客户端
client = OpenAI(
api_key=os.environ['API_KEY'], # 请确保已设置环境变量,或直接填入你的 API Key
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
# 支持的语言选项
LANGUAGES = {
"Auto Detect": "auto",
"English": "English",
"Chinese": "Chinese",
"Traditional Chinese": "Traditional Chinese",
"Russian": "Russian",
"Japanese": "Japanese",
"Korean": "Korean",
"Spanish": "Spanish",
"French": "French",
"Portuguese": "Portuguese",
"German": "German",
"Italian": "Italian",
"Thai": "Thai",
"Vietnamese": "Vietnamese",
"Indonesian": "Indonesian",
"Malay": "Malay",
"Arabic": "Arabic",
"Hindi": "Hindi",
"Hebrew": "Hebrew",
"Burmese": "Burmese",
"Tamil": "Tamil",
"Urdu": "Urdu",
"Bengali": "Bengali",
"Polish": "Polish",
"Dutch": "Dutch",
"Romanian": "Romanian",
"Turkish": "Turkish",
"Khmer": "Khmer",
"Lao": "Lao",
"Cantonese": "Cantonese",
"Czech": "Czech",
"Greek": "Greek",
"Swedish": "Swedish",
"Hungarian": "Hungarian",
"Danish": "Danish",
"Finnish": "Finnish",
"Ukrainian": "Ukrainian",
"Bulgarian": "Bulgarian",
"Serbian": "Serbian",
"Telugu": "Telugu",
"Afrikaans": "Afrikaans",
"Armenian": "Armenian",
"Assamese": "Assamese",
"Asturian": "Asturian",
"Basque": "Basque",
"Belarusian": "Belarusian",
"Bosnian": "Bosnian",
"Catalan": "Catalan",
"Cebuano": "Cebuano",
"Croatian": "Croatian",
"Egyptian Arabic": "Egyptian Arabic",
"Estonian": "Estonian",
"Galician": "Galician",
"Georgian": "Georgian",
"Gujarati": "Gujarati",
"Icelandic": "Icelandic",
"Javanese": "Javanese",
"Kannada": "Kannada",
"Kazakh": "Kazakh",
"Latvian": "Latvian",
"Lithuanian": "Lithuanian",
"Luxembourgish": "Luxembourgish",
"Macedonian": "Macedonian",
"Maithili": "Maithili",
"Maltese": "Maltese",
"Marathi": "Marathi",
"Mesopotamian Arabic": "Mesopotamian Arabic",
"Moroccan Arabic": "Moroccan Arabic",
"Najdi Arabic": "Najdi Arabic",
"Nepali": "Nepali",
"North Azerbaijani": "North Azerbaijani",
"North Levantine Arabic": "North Levantine Arabic",
"Northern Uzbek": "Northern Uzbek",
"Norwegian Bokmål": "Norwegian Bokmål",
"Norwegian Nynorsk": "Norwegian Nynorsk",
"Occitan": "Occitan",
"Odia": "Odia",
"Pangasinan": "Pangasinan",
"Sicilian": "Sicilian",
"Sindhi": "Sindhi",
"Sinhala": "Sinhala",
"Slovak": "Slovak",
"Slovenian": "Slovenian",
"South Levantine Arabic": "South Levantine Arabic",
"Swahili": "Swahili",
"Tagalog": "Tagalog",
"Ta’izzi-Adeni Arabic": "Ta’izzi-Adeni Arabic",
"Tosk Albanian": "Tosk Albanian",
"Tunisian Arabic": "Tunisian Arabic",
"Venetian": "Venetian",
"Waray": "Waray",
"Welsh": "Welsh",
"Western Persian": "Western Persian"
}
def translate_text(text, source_lang, target_lang):
"""
调用阿里云百炼的翻译模型进行翻译
"""
if not text.strip():
return "请输入要翻译的文本"
# 构造消息内容
messages = [{"role": "user", "content": text}]
# 构造翻译选项
translation_options = {
"source_lang": LANGUAGES.get(source_lang, "auto"),
"target_lang": LANGUAGES.get(target_lang, "English")
}
try:
# 调用模型
completion = client.chat.completions.create(
model="qwen-mt-turbo",
messages=messages,
stream=True,
max_tokens=2048,
extra_body={"translation_options": translation_options})
response = ''
for chunk in completion:
response = chunk.choices[0].delta.content
yield response
except Exception as e:
yield f"翻译出错: {str(e)}"
# 创建 Gradio 界面
with gr.Blocks(title="Qwen3-MT Translator") as demo:
gr.Markdown("# 🌍 Qwen3-MT Translator")
gr.Markdown(
'A real-time translation tool based on the Qwen3-MT model
Learn more about Qwen3-MT and API documentation',
elem_id="desc"
)
gr.Image(
value="https://modelscope.oss-cn-beijing.aliyuncs.com/resource/Qwen3-MT.png",
label="Qwen3-MT Supported Languages",
show_label=False,
show_download_button=False,
interactive=False,
height=60
)
with gr.Row():
with gr.Column():
source_text = gr.Textbox(
label="Input Text",
placeholder="Please enter the text to translate...",
lines=5
)
with gr.Row():
source_lang = gr.Dropdown(
choices=list(LANGUAGES.keys()),
value="Auto Detect",
label="Source Language"
)
target_lang = gr.Dropdown(
choices=list(LANGUAGES.keys())[1:], # Exclude "Auto Detect"
value="English",
label="Target Language"
)
translate_btn = gr.Button("Translate", variant="primary")
with gr.Column():
target_text = gr.Textbox(
label="Translation Result",
interactive=False,
lines=5
)
# 示例
gr.Examples(
examples=[
["你好,世界!", "Chinese", "English"],
["Hello, how are you today?", "English", "Chinese"],
["私は学生です。", "Japanese", "Chinese"],
["Bonjour, comment allez-vous?", "French", "English"]
],
inputs=[source_text, source_lang, target_lang],
outputs=target_text,
fn=translate_text,
cache_examples=True
)
# 按钮点击事件
translate_btn.click(
fn=translate_text,
inputs=[source_text, source_lang, target_lang],
outputs=target_text
)
# 支持回车键翻译
source_text.submit(
fn=translate_text,
inputs=[source_text, source_lang, target_lang],
outputs=target_text
)
# 启动应用
if __name__ == "__main__":
demo.launch()