前言

最近公司做一个ai应用,需要翻译功能,决定接入腾讯的机器翻译,看了官方文档:

机器翻译 文本翻译_腾讯云

我选择放弃,直接deepseek走起,搜索:"android接入腾讯机器翻译"-"使用OkHttp接入"-接着调试一堆错误(我选择放弃)- "这个接入太复杂了 能不能用sdk接入",看到胜利曙光直接sdk走起。

DS教程:

使用腾讯云官方 SDK 可以大幅简化接入流程,无需手动处理签名生成,避免因签名错误导致的调试困扰。以下是基于腾讯云官方 SDK 的极简接入方案:

1. 添加 SDK 依赖

在 模块build.gradle 中添加腾讯云机器翻译 SDK 依赖:

dependencies {
    implementation 'com.tencentcloudapi:tencentcloud-sdk-java-tmt:3.1.645'  // 使用最新版本
}

2. 初始化翻译客户端(按需切换kotlin)

import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.tmt.v20180321.TmtClient;
import com.tencentcloudapi.tmt.v20180321.models.*;

public class TencentSDKTranslator {
    private static final String SECRET_ID = "Your_SecretId";
    private static final String SECRET_KEY = "Your_SecretKey";
    private static final String REGION = "ap-beijing";  // 区域(如北京)

    // 初始化客户端
    private static TmtClient createClient() {
        Credential cred = new Credential(SECRET_ID, SECRET_KEY);
        return new TmtClient(cred, REGION);
    }
}

3. 调用翻译 API

直接调用 SDK 封装的方法,无需处理签名和请求格式:

// 发起翻译请求(异步示例)
public void translateText(String sourceText, String sourceLang, String targetLang) {
    TmtClient client = createClient();
    
    TextTranslateRequest req = new TextTranslateRequest();
    req.setSourceText(sourceText);
    req.setSource(sourceLang);  // 源语言代码(如 en)
    req.setTarget(targetLang);  // 目标语言代码(如 zh)
    req.setProjectId(0L);       // 项目ID(默认0)

    // 异步回调
    client.TextTranslate(req, new TencentCloudSDKHttpResponseHandler<TextTranslateResponse>() {
        @Override
        public void onSuccess(TextTranslateResponse response) {
            // 获取翻译结果
            String translatedText = response.getTargetText();
            System.out.println("翻译结果: " + translatedText);
        }

        @Override
        public void onError(Exception e) {
            // 错误处理
            e.printStackTrace();
        }
    });
}

4. 调用示例

在 Activity 或 Fragment 中直接使用:

// 示例:英译中
TencentSDKTranslator translator = new TencentSDKTranslator();
translator.translateText("Hello World", "en", "zh");

笔者的修正:

有时候不得不感叹ai的强大,一遍享受ai带来的便利,一边惶恐;

上面的方案并不能直接应用于项目,需要做一些修改(就不贴code了,见谅):

首先,建议将TencentSDKTranslator设计成单例类;

自实现翻译结果回调

其次,TencentCloudSDKHttpResponseHandler回调类实际代码中已经取消了,需要自己做回调逻辑。client.TextTranslate()会返回 TextTranslateResponse结果,TextTranslateResponse成员方法getTargetText()可以取出翻译结果,注释没有说是不是阻塞操作只当它是(android佬的自觉),笔者是用kotlin写的,所以直接在IO协程调用TextTranslate(),返回TextTranslateResponse后,切换到主协程做UI更新;

运行报错解决

最后,编译app运行起来会报错:

Java.lang.Error: javax.xml.datatype.DatatypeConfigurationException: Provider org.apache.xerces.jaxp.datatype.DatatypeFactoryImpl not found,

这个错误通常发生在Android应用处理XML数据时,由于缺少必要的XML处理库或JDK版本兼容性问题导致,以下是具体解决方案:

在模块的build.gradle中添加:

implementation 'javax.xml.bind:jaxb-api:2.3.1'
implementation 'xerces:xercesImpl:2.12.2'

如果启用混淆,在proguard-rules.pro中添加:

-keep class javax.xml.** { *; }
-keep class org.apache.xerces.** { *; }

恭喜骚年,你已经成功接入TMT。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐