在大型项目,多语种国际化翻译,有时候几百个单词,光查找翻译都要一天,所以开发了这一款自动化工具,可以自动识别翻译,并生成翻译后的ts文件!!!,也可以生成Execl,做对比。

该项目可以翻译文件(.ts)和Excel文件的相互转换。


#include "TranslateWorker.h"
#include <QDebug>
#include <QThread>

TranslateWorker::TranslateWorker(QObject *parent)
	: QObject(parent)
	, m_pNetworkManager(new QNetworkAccessManager(this))
	, m_pTranslateList(nullptr)
	, m_pTimer(new QTimer(this))
	, m_currentIndex(0)
{
	connect(m_pNetworkManager, &QNetworkAccessManager::finished,
			this, &TranslateWorker::onTranslateFinished);

	connect(m_pTimer, &QTimer::timeout,
			this, &TranslateWorker::onTranslateTimeout);

	m_pTimer->setSingleShot(true);
}

TranslateWorker::~TranslateWorker()
{
}

void TranslateWorker::SetTranslateList(QList<TranslateModel>* pList)
{
	m_pTranslateList = pList;
}

void TranslateWorker::setIDAndSecret(QString id, QString secret)
{
	BAIDU_APP_ID = id;
	BAIDU_APP_SECRET = secret;
}

bool TranslateWorker::BaiduTranslate(const QString& fromLang, const QString& toLang)
{
	if (!m_pTranslateList || m_pTranslateList->isEmpty()) {
		qDebug() << "翻译列表为空";
		return false;
	}

	if (BAIDU_APP_ID == "your_baidu_app_id" || BAIDU_APP_SECRET == "your_baidu_app_secret") {
		qDebug() << "请先配置百度翻译API的APP_ID和APP_SECRET";
		emit translateError("请先配置百度翻译API的APP_ID和APP_SECRET");
		return false;
	}

	m_fromLanguage = convertLanguageCode(fromLang);
	m_toLanguage = convertLanguageCode(toLang);
	m_currentIndex = 0;

	qDebug() << "开始百度翻译,总数:" << m_pTranslateList->size();

	translateNext();
	return true;
}

QString TranslateWorker::generateBaiduSign(const QString& query, const QString& salt)
{
	QString signStr = BAIDU_APP_ID + query + salt + BAIDU_APP_SECRET;
	QByteArray hash = QCryptographicHash::hash(signStr.toUtf8(), QCryptographicHash::Md5);
	return hash.toHex();
}

QString TranslateWorker::convertLanguageCode(const QString& originalCode)
{
	// 百度翻译语言代码映射
	static QMap<QString, QString> languageMap = {
		{"auto", "auto"},       // 自动检测
		{"zh-CHS", "zh"},       // 中文简体
		{"zh-CHT", "cht"},      // 中文繁体
		{"en", "en"},           // 英语
		{"ja", "jp"},           // 日语
		{"ko", "kor"},          // 韩语
		{"fr", "fra"},          // 法语
		{"de", "de"},           // 德语
		{"es", "spa"},          // 西班牙语
		{"ru", "ru"},           // 俄语
		{"th", "th"},           // 泰语
		{"ar", "ara"},          // 阿拉伯语
		{"pt", "pt"},           // 葡萄牙语
		{"it", "it"},           // 意大利语
		{"el", "el"},           // 希腊语
		{"nl", "nl"},           // 荷兰语
		{"pl", "pl"},           // 波兰语
		{"bg", "bul"},          // 保加利亚语
		{"et", "est"},          // 爱沙尼亚语
		{"da", "dan"},          // 丹麦语
		{"fi", "fin"},          // 芬兰语
		{"cs", "cs"},           // 捷克语
		{"ro", "rom"},          // 罗马尼亚语
		{"sl", "slo"},          // 斯洛文尼亚语
		{"sv", "swe"},          // 瑞典语
		{"hu", "hu"},           // 匈牙利语
		{"vi", "vie"}           // 越南语
	};

	return languageMap.value(originalCode, originalCode);
}

void TranslateWorker::translateNext()
{
	if (m_currentIndex >= m_pTranslateList->size()) {
		qDebug() << "所有翻译完成";
		emit translateCompleted();
		return;
	}

	const TranslateModel& model = m_pTranslateList->at(m_currentIndex);
	QString sourceText = model.GetSource();

	if (sourceText.isEmpty()) {
		qDebug() << "跳过空文本,索引:" << m_currentIndex;
		m_currentIndex++;
		QTimer::singleShot(100, this, &TranslateWorker::translateNext);
		return;
	}

	// 生成请求参数

	// 创建请求
	
	// 发送请求
	

	// 设置超时

	// 发送进度信号
	emit translateProgress(m_currentIndex + 1, m_pTranslateList->size());
}


void TranslateWorker::onTranslateTimeout()
{
	qDebug() << "翻译请求超时";
	emit translateError("翻译请求超时");
}

void TranslateWorker::resetTranslation()
{
	m_currentIndex = 0;
	m_pTimer->stop();
}

Logo

一站式 AI 云服务平台

更多推荐