前言

系统涉及到多国语言的翻译,之前依赖人工翻译多国语言效率较差。

可以通过ai工具实现多语言翻译和自动写入功能

关键代码

功能采用python脚本实现

.env文本配置OPENAI_API_KEY和OPENAI_BASE_URL,可以从iflow心流平台免费申请试用

https://platform.iflow.cn/?spm=5d4b8e0.2ef5001f.0.0.584473e83RUgnb

文件格式

OPENAI_API_KEY=sk-XXXXX # 国内访问可加这个(可选) 
OPENAI_BASE_URL=https://apis.iflow.cn/v1

i18n_agent.py代码

import os
import configparser
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

load_dotenv()

LANG_MAPPING = {
    "i18n": "英语",
    "i18n_de": "德语",
    "i18n_es_ES": "西班牙语(西班牙)",
    "i18n_fr_FR": "法语(法国)",
    "i18n_zh_CN": "简体中文",
    "i18n_zh_HK": "繁体中文(香港)"
}
I18N_FILE_DIR = "D:/work/src/ass-common/src/main/resources"
#这里的api_key可以设置到环境变量,也可以手工写入
llm = ChatOpenAI(
    model="deepseek-v3.2",
    temperature=0,
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL")
)

def translate_text(original_value: str, target_lang: str) -> str:
    """
    将原始文本翻译为指定目标语言,仅返回翻译结果,无多余解释
    :param original_value: 原始文本(如"提交")
    :param target_lang: 目标语言(如"德语""繁体中文(香港)")
    :return: 翻译后的文本
    """
    prompt = f"请精准翻译以下文本为{target_lang},仅返回翻译结果,不要额外内容:\n{original_value}"
    translated = llm.invoke(prompt)
    return translated.content.strip()

def write_to_properties(key: str, value: str, file_name: str) -> str:
    """
    将key=value写入对应的.properties文件,遵循Java规范
    :param key: 国际化key(如common.submit)
    :param value: 翻译后的value
    :param file_name: 文件名(如i18n、i18n_de)
    :return: 执行结果
    """
    file_path = os.path.join(I18N_FILE_DIR, f"{file_name}.properties")

    os.makedirs(I18N_FILE_DIR, exist_ok=True)

    # 读取现有内容,检查key是否存在
    key_exists = False
    if os.path.exists(file_path):
        with open(file_path, 'r', encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                if line and not line.startswith('#'):
                    if '=' in line:
                        k, _ = line.split('=', 1)
                        if k.strip() == key:
                            key_exists = True
                            break

    # 如果key不存在,则追加
    if not key_exists:
        # 检查文件是否存在且不为空,并且最后一个字符不是换行符
        needs_newline = False
        if os.path.exists(file_path) and os.path.getsize(file_path) > 0:
            with open(file_path, 'rb') as f:
                f.seek(-1, os.SEEK_END)
                last_char = f.read()
                if last_char != b'\n':
                    needs_newline = True
        
        with open(file_path, 'a', encoding='utf-8') as f:
            if needs_newline:
                f.write('\n')
            f.write(f"{key}={value}\n")
        return f"✅ 成功写入 {file_path}\n   key: {key}\n   value: {value}"
    else:
        return f"⚠️  key已存在,跳过写入 {file_path}\n   key: {key}"

def run_i18n_agent(key: str, original_value: str):
    """
    执行国际化翻译Agent
    :param key: 国际化key(如common.hello)
    :param original_value: 原始value(如"你好")
    :return: 执行结果
    """
    results = []
    
    for file_name, target_lang in LANG_MAPPING.items():
        print(f"🔄 正在翻译为 {target_lang}...")
        
        translated_value = translate_text(original_value, target_lang)
        
        write_result = write_to_properties(key, translated_value, file_name)
        results.append(write_result)
        print(f"✅ {target_lang} 完成")
    
    return "\n".join(results)

if __name__ == "__main__":
    test_key = "common.test3"
    test_value = "test 测试331"
    print("🚀 开始执行国际化翻译Agent...")
    result = run_i18n_agent(test_key, test_value)
    print("\n📝 最终执行结果:")
    print(result)

关键配置

项目资源文件路径


I18N_FILE_DIR = "D:/work/src/ass-common/src/main/resources"

多语言文件名称及描述

LANG_MAPPING = {
    "i18n": "英语",
    "i18n_de": "德语",
    "i18n_es_ES": "西班牙语(西班牙)",
    "i18n_fr_FR": "法语(法国)",
    "i18n_zh_CN": "简体中文",
    "i18n_zh_HK": "繁体中文(香港)"
}

大模型信息

llm = ChatOpenAI(
    model="deepseek-v3.2",
    temperature=0,
    api_key=os.getenv("OPENAI_API_KEY"),
    base_url=os.getenv("OPENAI_BASE_URL")
)

要生成的key和value

一般情况下一次生成一个就可以了,后续可以考虑根据这个扩展

if __name__ == "__main__":
    test_key = "common.test3"
    test_value = "test 测试331"
    print("🚀 开始执行国际化翻译Agent...")
    result = run_i18n_agent(test_key, test_value)
    print("\n📝 最终执行结果:")
    print(result)

总结

这是一个比较初级的多语言翻译的agent,还需要完善的更加智能

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐