使用 AWS SDK for Kotlin 调用 Amazon Translate:实时翻译与批量翻译任务实战

发布时间:2026/9/26 2:14:35

使用 AWS SDK for Kotlin 调用 Amazon Translate:实时翻译与批量翻译任务实战 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载本文围绕aws-doc-sdk-examples仓库中的 kotlin/services/translate/README.md 及其配套源码系统讲解如何基于 AWS SDK for Kotlin 调用 Amazon Translate覆盖单文本实时翻译TranslateText、批量文档翻译任务StartTextTranslationJob、任务状态查询DescribeTextTranslationJob与任务列表获取ListTextTranslationJobs四类核心操作并给出可直接运行的 Kotlin 代码与 JUnit 集成测试方案。读完本文你将能够在自己的 Kotlin 项目中复刻这套实时翻译 异步批量翻译的完整实现并理解其参数语义与运行前提。概览Amazon Translate 与 SDK for KotlinAmazon Translate 是一项基于神经网络的机器翻译服务支持在多种语言之间进行文本翻译以英语为中心向/从其他语言互译同时提供实时单条文本翻译与面向文档集的异步批量翻译两类能力。本示例仓库在 kotlin/services/translate 目录下提供了四个相互独立、可组合使用的 Kotlin 示例示例文件对应 API功能TranslateText.ktTranslateText将单条文本从源语言实时翻译为目标语言BatchTranslation.ktStartTextTranslationJobDescribeTextTranslationJob提交批量翻译任务并轮询任务状态直至完成DescribeTextTranslationJob.ktDescribeTextTranslationJob按 JobId 查询单个批量翻译任务的状态ListTextTranslationJobs.ktListTextTranslationJobs分页列出历史批量翻译任务以上实现均通过aws.sdk.kotlin.services.translate.TranslateClient完成SDK 版本由 build.gradle.kts 中的 BOMBill of Materialsaws.sdk.kotlin:bom:1.5.63统一约束。示例中的默认区域为us-west-2运行时通过TranslateClient.fromEnvironment { region us-west-2 }创建客户端。环境准备Prerequisites运行这些示例前需要满足以下前提条件AWS 账号与凭据按照 AWS SDK for Kotlin Developer Guide 配置默认凭据与默认区域。本示例通过TranslateClient.fromEnvironment从环境中的 AWS 凭据链加载访问密钥。JDK 17build.gradle.kts中sourceCompatibility与targetCompatibility均设置为JavaVersion.VERSION_17Kotlin 编译器目标 JVM 版本同样为 17。Gradle 构建环境示例使用 Kotlin JVM 插件与application插件通过 Gradle 配置并构建项目。具体入门方式可参考 kotlin/README.md 的说明。批量翻译附加资源运行BatchTranslation示例需要 S3 存储桶存放待翻译文档与翻译结果以及一个用于翻译任务的 IAM 数据访问角色 ARN。仓库 kotlin/README.md 同时提示这些示例代码基于 beta 版本的 AWS SDK for Kotlin 编写各服务目录下的独立 README 记录了对应服务的具体示例信息。示例一实时翻译文本TranslateTextTranslateText.kt 演示了最直接的文本翻译场景构造TranslateTextRequest指定源语言、目标语言与文本内容同步调用translateClient.translateText并打印结果。suspend fun textTranslate() { val textRequest TranslateTextRequest { sourceLanguageCode en targetLanguageCode fr text Its a sunny day today } TranslateClient.fromEnvironment { region us-west-2 }.use { translateClient - val textResponse translateClient.translateText(textRequest) println(textResponse.translatedText) } }要点说明语言代码sourceLanguageCode与targetLanguageCode使用语言代码例如en英语、fr法语。Amazon Translate 支持在英语与多种语言之间互译目标语言集合以官方语言列表为准。同步调用translateText是即时返回的同步 API适合对话式翻译、单条文本处理等低延迟场景。挂起函数示例中的main与textTranslate均为suspend函数体现了 AWS SDK for Kotlin 基于协程coroutines的异步编程模型SDK 调用需在协程作用域内执行。资源管理通过.use { }作用域函数确保TranslateClient在使用完毕后自动关闭。程序入口main()直接调用textTranslate()无命令行参数。示例二批量翻译文档StartTextTranslationJob 状态轮询BatchTranslation.kt 面向大规模文档集翻译场景从 S3 读取待翻译文档异步提交批量翻译任务并在任务完成后返回 JobId。命令行参数程序入口main(args: ArrayString)接收 4 个参数参数个数不匹配时会打印用法说明并退出Usage: s3Uri s3UriOut jobName dataAccessRoleArn Where: s3Uri - The URI of the Amazon S3 bucket where the documents to translate are located. s3UriOut - The URI of the Amazon S3 bucket where the translated documents are saved to. jobName - The job name. dataAccessRoleArn - The Amazon Resource Name (ARN) value of the role required for translation jobs.参数含义s3Uri存放待翻译文档的 S3 路径例如s3://my-bucket/input/s3UriOut翻译结果输出路径例如s3://my-bucket/output/jobName批量翻译任务的名称dataAccessRoleArnAmazon Translate 执行该任务所需的 IAM 角色 ARN角色需具备对输入/输出 S3 桶的读写权限核心实现translateDocuments函数依次完成四步构造输入/输出配置 → 发起任务 → 轮询状态 → 返回 JobId。suspend fun translateDocuments( s3UriVal: String?, s3UriOutVal: String?, jobNameVal: String?, dataAccessRoleArnVal: String?, ): String? { val sleepTime: Long 5 val dataConfig InputDataConfig { s3Uri s3UriVal contentType text/plain } val outputDataConfigVal OutputDataConfig { s3Uri s3UriOutVal } val myList mutableListOfString() myList.add(fr) val textTranslationJobRequest StartTextTranslationJobRequest { jobName jobNameVal dataAccessRoleArn dataAccessRoleArnVal inputDataConfig dataConfig outputDataConfig outputDataConfigVal sourceLanguageCode en targetLanguageCodes myList } TranslateClient.fromEnvironment { region us-west-2 }.use { translateClient - val textTranslationJobResponse translateClient.startTextTranslationJob(textTranslationJobRequest) // Keep checking until job is done. val jobDone false var jobStatus: String val jobIdVal: String? textTranslationJobResponse.jobId val jobRequest DescribeTextTranslationJobRequest { jobId jobIdVal } while (!jobDone) { // Check status on each loop. val response translateClient.describeTextTranslationJob(jobRequest) jobStatus response.textTranslationJobProperties?.jobStatus.toString() println(jobStatus) if (jobStatus.contains(Completed)) { break } else { print(.) delay(sleepTime * 1000) } } return textTranslationJobResponse.jobId } }实现细节InputDataConfig通过s3Uri指定输入文档位置contentType text/plain声明文档为纯文本格式。批量翻译任务支持的文件格式取决于服务配置纯文本text/plain是最常用的一种。OutputDataConfig通过s3Uri指定翻译结果写入位置。多目标语言targetLanguageCodes是一个字符串列表示例仅添加了fr意味着单次任务可同时翻译为多种目标语言。状态轮询提交成功后循环调用DescribeTextTranslationJob获取jobStatus当状态包含Completed时跳出循环否则每 5 秒sleepTime * 1000毫秒查询一次未完成时打印.作为进度提示。轮询依赖kotlinx.coroutines.delay实现非阻塞等待。返回值函数最终返回任务的jobId可供DescribeTextTranslationJob示例继续查询使用。示例三查询单个翻译任务DescribeTextTranslationJobDescribeTextTranslationJob.kt 演示如何根据 JobId 获取某个批量翻译任务的详细信息与当前状态。suspend fun describeTranslationJob(id: String?) { val textTranslationJobRequest DescribeTextTranslationJobRequest { jobId id!! } TranslateClient.fromEnvironment { region us-west-2 }.use { translateClient - val jobResponse translateClient.describeTextTranslationJob(textTranslationJobRequest) println(The job status is ${jobResponse.textTranslationJobProperties?.jobStatus}.) } }命令行参数程序入口接收 1 个参数jobId该值可从BatchTranslation示例的输出中获取。参数缺失时打印用法说明并退出。响应结构textTranslationJobProperties?.jobStatus返回任务状态如Submitted、InProgress、Completed、CompletedWithError等同时TextTranslationJobProperties还包含任务名称、输入/输出配置、错误信息等元数据可用于任务管理与结果追溯。示例四列出翻译任务ListTextTranslationJobsListTextTranslationJobs.kt 演示分页列出历史批量翻译任务suspend fun getTranslationJobs() { val textTranslationJobsRequest ListTextTranslationJobsRequest { maxResults 10 } TranslateClient.fromEnvironment { region us-west-2 }.use { translateClient - val response translateClient.listTextTranslationJobs(textTranslationJobsRequest) response.textTranslationJobPropertiesList?.forEach { prop - println(The job name is ${prop.jobName}) println(The job id is: ${prop.jobId}) } } }maxResults单次返回的最大任务数示例设为 10用于控制分页大小。textTranslationJobPropertiesList返回TextTranslationJobProperties列表示例打印每个任务的jobName与jobId。若任务数量较多可通过分页参数如基于NextToken的游标继续翻页。该示例无命令行参数直接调用getTranslationJobs()即可。Gradle 构建配置build.gradle.kts 给出了这些示例的完整依赖与构建配置核心内容如下plugins { kotlin(jvm) version 2.1.0 application } java { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } repositories { mavenCentral() } dependencies { implementation(platform(aws.sdk.kotlin:bom:1.5.63)) implementation(aws.sdk.kotlin:translate) implementation(aws.sdk.kotlin:secretsmanager) implementation(aws.smithy.kotlin:http-client-engine-okhttp) implementation(aws.smithy.kotlin:http-client-engine-crt) implementation(com.google.code.gson:gson:2.10) testImplementation(org.junit.jupiter:junit-jupiter:5.9.2) implementation(org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4) implementation(org.slf4j:slf4j-api:2.0.15) implementation(org.slf4j:slf4j-simple:2.0.15) }配置要点BOM 依赖管理通过aws.sdk.kotlin:bom:1.5.63引入 SDK BOM随后只需声明aws.sdk.kotlin:translateAmazon Translate 客户端与aws.sdk.kotlin:secretsmanager测试中用到的 Secrets Manager 客户端无需逐一手写版本号。HTTP 引擎同时引入http-client-engine-okhttp与http-client-engine-crt为 SDK 提供可选的 HTTP 传输实现。测试与工具链JUnit Jupiter 5.9.2 负责测试执行kotlinx-coroutines-core:1.6.4支撑协程编程Gson 用于解析测试参数 JSONSLF4J 提供日志输出构建时还会应用ktlint插件org.jlleitschuh.gradle:ktlint-gradle:11.5.1进行代码风格检查。JVM 目标kotlinOptions.jvmTarget 17并通过-Xlint:-deprecation抑制弃用警告。运行示例由于项目启用了application插件可通过 Gradle 直接运行示例类。不同示例对命令行参数的依赖不同实时翻译无参数运行TranslateText.kt的main()直接输出Its a sunny day today的法语翻译结果。批量翻译4 个参数依次传入s3Uri、s3UriOut、jobName、dataAccessRoleArn例如gradle run --argss3://my-bucket/input/ s3://my-bucket/output/ my-job arn:aws:iam::123456789012:role/TranslateAccessRole查询单个任务1 个参数传入从批量翻译示例返回的jobIdgradle run --argsjobId列出任务无参数直接运行ListTextTranslationJobs.kt的main()控制台将打印最近任务的名称与 ID。提示每个示例的main()都是suspend函数运行前需确保 AWS 凭据已通过环境变量或默认凭据链配置完成。运行这些示例可能产生 AWS 费用详见下文注意事项。集成测试JUnit Secrets Manager仓库在 TranslateKotlinTest.kt 中提供了覆盖四个示例的 JUnit 集成测试。测试类使用TestMethodOrder(OrderAnnotation::class)保证用例按序执行并通过TestInstance(TestInstance.Lifecycle.PER_CLASS)复用类实例。测试用例顺序用例验证内容1translateTextTest调用textTranslate()验证实时翻译流程可正常执行2batchTranslationTest调用translateDocuments(...)断言返回的jobId非空3listTextTranslationJobsTest调用getTranslationJobs()验证任务列表可获取4describeTextTranslationJobTest以测试 2 产生的jobId调用describeTranslationJob(id)验证状态查询测试 2 的jobId会被保存在类成员变量中供测试 4 复用因此测试对执行顺序有依赖。测试参数来源BeforeAll的setup()从 AWS Secrets Manager 读取密钥test/translate解析其中的s3Uri、s3UriOut、jobName并追加UUID.randomUUID()保证唯一性、dataAccessRoleArn四个字段作为批量翻译测试的输入private suspend fun getSecretValues(): String { val secretName test/translate val valueRequest GetSecretValueRequest { secretId secretName } SecretsManagerClient { region us-east-1 }.use { secretClient - val valueResponse secretClient.getSecretValue(valueRequest) return valueResponse.secretString.toString() } }测试使用的 Secrets Manager 客户端区域为us-east-1密钥内 JSON 字段通过 Gson 反序列化为SecretValues数据类。这意味着运行测试前必须在账号中预先创建名为test/translate的密钥并写入上述四个字段否则测试会因参数缺失而失败。测试运行方式有两种从 IDE如 IntelliJ IDEA直接执行 JUnit 测试或在命令行运行 Gradle 的test任务build.gradle.kts中配置了useJUnitPlatform()并将passed、skipped、failed事件输出到日志。注意事项与费用提示按照 README 的提示使用本仓库示例需注意以下几点费用运行示例或测试均可能产生 AWS 费用。Amazon Translate 按翻译的文本量计费批量翻译任务还会涉及 S3 存储与请求费用。详细计费请参考 AWS Pricing 与 Free Tier。最小权限原则建议遵循最小权限原则least privilege仅授予执行任务所需的最低权限——例如批量翻译角色只需对指定输入/输出 S3 桶的读写权限测试账号无需授予超出所需的 IAM 权限。区域可用性本代码未经所有 AWS 区域测试。部分区域可能不提供 Amazon Translate部署前请确认目标区域的服务可用性参考 AWS Regional Services。版本说明示例基于 beta 阶段的 AWS SDK for Kotlin 编写kotlin/README.md 明确标注接口可能随 SDK 演进而调整本仓库实际锁定在aws.sdk.kotlin:bom:1.5.63。其他资源Amazon Translate 开发者指南服务能力与限制的权威说明Amazon Translate Developer GuideAmazon Translate API 参考Amazon Translate API ReferenceSDK for Kotlin 的 Amazon Translate 参考文档SDK for Kotlin Amazon Translate reference仓库内其他服务示例与使用教程kotlin/README.md其中 kotlin/usecases 目录还包含跨服务集成教程如 Android 消息翻译应用本文内容基于仓库 kotlin/services/translate 目录下的 README 与源码整理示例代码遵循 Apache-2.0 许可版权归 Amazon.com, Inc. 或其关联公司所有。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐使用 AWS SDK for .NET 操作 Amazon Translate从实时文本翻译到异步批处理任务使用 AWS SDK for .NET 操作 Amazon Translate从实时文本翻译到异步批处理任务 Amazon Translate 是 AWS 提示例工程教程后端aws-doc-sdk-examples基于 AWS SDK for Java 2.x 实现 Amazon Translate 单文本与批量文档翻译aws doc sdk examples基于 AWS SDK for Java 2.x 实现 Amazon Translate 单文本与批量文档翻译 本文以示例工程教程后端用 ProcessHacker 排查系统卡顿CPU、内存、磁盘硬件监控完整指南用 ProcessHacker 排查系统卡顿CPU、内存、磁盘硬件监控完整指南 系统莫名变卡却说不清瓶颈在哪ProcessHacker 是一款免费的系统性桌面应用调试器应用安全驱动开发上一篇Nhost API版本控制管理Nuxt.js应用接口变更下一篇Colorify.js实战案例如何打造动态主题切换的网站设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/26 2:14:35

Blockbench 免费低多边形3D建模与动画完整教程

Blockbench 免费低多边形3D建模与动画完整教程 【免费下载链接】blockbench Blockbench - A low poly 3D model editor 项目地址: https://gitcode.com/GitHub_Trending/bl/blockbench 想给游戏或 Minecraft 做低多边形模型,却被商业软件的价格和陡峭学习曲线劝退?Bloc…

2026/9/26 3:29:39

链上竞技游戏 klawarena 接入 TaoToken:AI RPG 配置与验证指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 3:29:39

VSCode 离线下载安装后,用 TaoToken 统一 Key 打通 AI 编程工具链

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 3:29:39

Manus邀请薅羊毛:TaoToken统一API通道配置与验证指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 3:24:39

【项目编号:project81378】论坛系统真正难的是治理:Spring Boot 从帖子分类、私信通知到权限运营的完整实现

COMMUNITY OPS SPRING BOOT内容治理链论坛系统真正难的是治理:Spring Boot 从帖子分类、私信通知到权限运营的完整实现发帖只是入口。一个可运营的论坛还需要分类检索、帖子详情、评论、收藏、私信、通知,以及后台用户、内容、资源和权限治理。技术主…

2026/9/25 21:00:17

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/25 20:59:52

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/26 0:04:28

画质修复APP怎么选?Wink影像修复能力与产品实力解析

现如今手机拍摄场景愈发丰富,演唱会直拍、漫展记录、老视频翻新、日常vlog录制,都会遇到画面模糊、噪点多、曝光失衡等问题,不少用户在挑选工具时比较在意一款画质修复APP能够兼顾修复效果与自然质感。Wink作为美图公司推出的全球化AI影像增强…

2026/9/26 0:04:28

超低能耗建筑K值要求能否满足?浙东铝业建筑型材解析

核心摘要浙东铝业的超低能耗系统门窗产品,资料显示保温性能可达 K≤1.4W/(㎡K),能够对应上海地区超低能耗住宅对门窗保温性能的应用需求。判断建筑是否满足超低能耗要求,不能只看铝型材本身,还需要结合玻璃、隔热条、密封系统、开…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/25 18:41:36

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑