1、在windows笔记本作为工作站

2、下载 HY-MT1.5-7B-Q4_K_M.gguf 混元模型

3、创建excel表格,写上词条和语言,中文是必须要写的4、运行脚本

from llama_cpp import Llama
import time
import pandas as pd
import os
import re
from pathlib import Path

# ====================== 配置项(仅需修改这里)======================
MODEL_PATH = "models/HY-MT1.5-7B-Q4_K_M.gguf"  # 你的GGUF模型路径
EXCEL_PATH = "你的多语言词条表.xlsx"                   # 你的翻译表格路径
RES_DIR = "res/values"                            # 所有XML统一放此目录
# ==================================================================
lang_map = {
    "zh": "中国",
    "en": "英语",
    "ja": "日语",
    # 可扩展其他语言:
     "fr": "法语",
     "de": "德语",
     "it": "意大利语",
}


# 3. Qwen模型翻译核心函数(严格遵循翻译规则)
def qwen_translate(llm, text: str, target_lang: str):
    # 构建符合Qwen规则的Prompt
    prompt = f"""[INST] 执行翻译任务:
1. 中文文本:{text}
2. 目标语言:{target_lang}
3. 核心规则:
   - 严格保留文本中的 %d/%s 等占位符,位置/格式不变;
   - 仅翻译占位符外的中文内容,占位符不做任何修改;
   - 只输出纯{target_lang}翻译结果,无解释、无备注、无多余文字。 [/INST]"""

    try:
        # 调用Qwen模型(参数严格遵循规则)
        output = llm.create_completion(
            prompt=prompt,
            max_tokens=64,
            temperature=0.0,
            stop=["[/INST]", "\n", "。", ":"],
            echo=False,
            repeat_penalty=1.5
        )

        # 提取并清洗结果
        result = output["choices"][0]["text"].strip()
        # 去除前缀(如"翻译结果:""答案:")
        for prefix in ["翻译结果:", "答案:", "译文:", ":"]:
            if prefix in result:
                result = result.split(prefix)[-1].strip()
        # 校验:占位符数量一致(可选,增强鲁棒性)
        src_placeholder = len(re.findall(r"%[ds]", text))
        res_placeholder = len(re.findall(r"%[ds]", result))
        if src_placeholder != res_placeholder and src_placeholder > 0:
            print(f"占位符数量不一致:原文[{text}] → 译文[{result}]")
            return ""

        return result
    except Exception as e:
        print(f"翻译失败[{text}→{target_lang}]:{e}")
        return ""

def generate_strings_xml(df, res_dir):
    """生成 strings-{lang}.xml 文件,统一放在 values 目录下"""
    # 读取语言列(跳过第一列“词条”)
    lang_cols = df.columns[1:].tolist()
    print(f"\n📋 检测到语言:{lang_cols}")

    # 创建 values 目录(确保存在)
    Path(res_dir).mkdir(parents=True, exist_ok=True)

    for lang in lang_cols:
        # 文件名格式:strings-{lang}.xml(如 strings-en.xml)
        xml_filename = f"strings-{lang}.xml"
        xml_path = Path(res_dir) / xml_filename

        # 生成 XML 内容(标准 Android 格式)
        xml_lines = [
            '<?xml version="1.0" encoding="utf-8"?>',
            '<resources>'
        ]
        for _, row in df.iterrows():
            key = row["词条"].strip()
            value = row[lang].strip()
            # 关键:XML 特殊字符转义(避免文件解析报错)
            value = value.replace("&", "&amp;") \
                         .replace("<", "&lt;") \
                         .replace(">", "&gt;") \
                         .replace("\"", "&quot;") \
                         .replace("'", "&apos;")
            xml_lines.append(f'    <string name="{key}">{value}</string>')
        xml_lines.append('</resources>')

        # 写入文件(UTF-8 编码适配多语言)
        with open(xml_path, "w", encoding="utf-8") as f:
            f.write("\n".join(xml_lines))
        print(f"生成文件:{xml_path}")

def init_qwen_model(model_path: str):
    """初始化千问模型(多核加速配置)"""
    try:
        # 核心提速参数:n_threads设为CPU核心数的2倍(比如8核设16)
        llm = Llama(
            model_path=model_path,
            n_ctx=1024,          # 短文本翻译缩小上下文,减少内存占用
            n_threads=16,        # 根据你的CPU核心数调整(关键提速)
            n_batch=512,         # 批处理大小,提升推理吞吐
            verbose=False,       # 关闭冗余日志
            n_gpu_layers=0       # 有NVIDIA显卡请改为20~30(GPU加速)
        )
        print("大模型加载成功!")
        return llm
    except Exception as e:
        print(f"模型加载失败:{str(e)}")
        return None

if __name__ == "__main__":
    # 1. 初始化模型
    llm = init_qwen_model(MODEL_PATH)
    if not llm:
        exit(1)

    # 2. 读取 Excel 表格
    try:
        df = pd.read_excel(EXCEL_PATH, dtype=object)
        df = df.fillna("")
        for col in df.columns:
            df[col] = df[col].astype(str)
        print(f"成功读取表格:{df.shape[0]} 条词条,{df.shape[1]-1} 种语言")
    except Exception as e:
        print(f"读取表格失败:{e}")
        exit(1)

    # 3. 动态获取语言列表(从表头读取,不写死)


    lang_list = df.columns[1:].tolist()
    source_lang = "中文"

    # 4. 批量翻译
    for lang in lang_list:
        if lang == "zh":
            continue  # 中文列无需翻译
        print(f"\n开始翻译 → {lang}")
        for i, row in df.iterrows(): #把表格里的每一行,依次取出来处理”
            cn_text = row["zh"].strip() # 从表格当前行里,找到列名为 “zh”(中文列)的单元格内容 删掉文本开头 / 结尾的空格、换行、制表符(比如 “你好”→“你好”)
            if not cn_text:
                print(f"跳过空词条(行{i+1})")
                continue
            
            trans_result = qwen_translate(llm, cn_text, lang_map[lang])
            df.at[i, lang] = trans_result
            time.sleep(0.3)  # 避免模型过载

    # 5. 生成所有 strings-{lang}.xml 文件(统一放 values 目录)
    generate_strings_xml(df, RES_DIR)

    # 6. 保存翻译后的表格(方便核对)
    output_excel = "translated_result.xlsx"
    df.to_excel(output_excel, index=False)
    print(f"\n全部完成!")
    print(f"翻译结果表格:{os.path.abspath(output_excel)}")
    print(f"所有XML文件路径:{os.path.abspath(RES_DIR)}")

    # 释放模型资源
    llm.close()

5、等待生成多语言文件,

更多推荐