当前位置:   article > 正文

100行代码开源翻译小工具_代码在线翻译器

代码在线翻译器

  100行代码实现翻译小工具,支持中英互译。程序执行文件就不发布了,有兴趣可以下载源码自己编译运行。
请添加图片描述

源码地址:https://github.com/aeagean/TranslationAPI

#include <QApplication>
#include <QDateTime>
#include <QCryptographicHash>
#include <QPushButton>
#include <QTextEdit>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QJsonArray>
#include "HttpClient.h"

using namespace AeaQt;

static QByteArray createSign(const QByteArray &text, const QByteArray &appid, const QByteArray &key, const QByteArray &salt)
{
    return QCryptographicHash::hash(appid+text+salt+key, QCryptographicHash::Md5).toHex();
}

static QString trans(const QByteArray &text, bool isEn = true)
{
    QString output;
    QByteArray appid = APP_ID; // 修改为你的app-id
    QByteArray key   = APP_KEY; // 修改为你的密钥
    QByteArray salt  = QByteArray::number(QDateTime::currentSecsSinceEpoch());
    QByteArray sign  = createSign(text, appid, key, salt);

    static HttpClient client;
    client.get("http://api.fanyi.baidu.com/api/trans/vip/translate")
          .queryParam("from",  isEn ? "en" : "zh")
          .queryParam("to",    isEn ? "zh" : "en")
          .queryParam("q",     text)
          .queryParam("appid", appid)
          .queryParam("salt",  salt)
          .queryParam("sign",  sign)
          .onSuccess([&](QJsonObject result) {
              qDebug().noquote()<<result;
              auto arr = result.value("trans_result").toArray();
              output = text;
              int index = 0;
              // 转换翻译,可将换行和空格字符一并转换
              for (int i = 0; i < arr.size(); i++) {
                  QString src = arr.at(i).toObject().value("src").toString();
                  QString dst = arr.at(i).toObject().value("dst").toString();
                  index = output.indexOf(src, index);
                  output.replace(index, src.size(), dst);
              }
           })
          .onFailed([](QByteArray error) { qDebug()<<error; })
          .logLevel(HttpRequest::All)
          .block()
          .exec();

    return output;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton *okBtn = new QPushButton("翻译");
    QPushButton *switchBtn = new QPushButton("英->中");
    QHBoxLayout *hLayout = new QHBoxLayout;
    hLayout->addWidget(okBtn, 5);
    hLayout->addWidget(switchBtn, 1);

    QTextEdit *textInput = new QTextEdit;
    QTextEdit *textOutput = new QTextEdit;
    textOutput->setReadOnly(true);
    QWidget w;
    w.setWindowTitle("翻译小工具");
    w.resize(320, 240);
    QVBoxLayout *l = new QVBoxLayout;
    l->addWidget(textInput, 2);
    l->addLayout(hLayout, 1);
    l->addWidget(textOutput, 2);
    w.setLayout(l);
    w.show();

    QObject::connect(okBtn, &QPushButton::clicked, okBtn, [&](){
        qDebug().noquote() << textInput->toPlainText().toUtf8();
        QString result = trans(textInput->toPlainText().toUtf8(), switchBtn->text() == "英->中" ? true : false);
        textOutput->setPlainText(result);
    });

    QObject::connect(switchBtn, &QPushButton::clicked, switchBtn, [&](){
        if (switchBtn->text() == "中->英") {
            switchBtn->setText("英->中");
        }
        else {
            switchBtn->setText("中->英");
        }
    });

    return a.exec();
}

  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/422666
推荐阅读
相关标签
  

闽ICP备14008679号