基于Google Cloud Translation实现Android应用多语言支持
借助Google Cloud Translation实现Android多语言支持(JSON API响应翻译)
1. 基础准备(确认已完成)
确保你已经集成Google Cloud Translation相关依赖,配置好API密钥,并在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
你的项目中应该已经有翻译客户端的初始化逻辑(毕竟已经能实现单个单词翻译),这里不再赘述。
2. 解析JSON格式的API响应
先把API返回的JSON字符串解析成对应的数据类,方便后续提取需要翻译的文本字段。
假设API响应结构如下:
{ "title": "Welcome to our app", "description": "This app helps you manage your tasks efficiently", "buttonText": "Get Started" }
用Kotlin定义对应的数据类(Java可以用POJO):
data class ApiResponse( val title: String, val description: String, val buttonText: String )
然后用Gson或Moshi完成解析:
val jsonString = // 从API接口获取的JSON响应字符串 val apiResponse = Gson().fromJson(jsonString, ApiResponse::class.java)
3. 批量翻译JSON中的文本字段
Google Cloud Translation支持批量翻译请求,比逐个调用API更高效,适合处理JSON中的多个文本字段。
方案一:使用官方SDK批量翻译
// 初始化翻译客户端(已有的实例直接复用) val translateClient = TranslateOptions.newBuilder() .setApiKey("YOUR_API_KEY") .build() .service // 收集所有需要翻译的文本 val textsToTranslate = listOf( apiResponse.title, apiResponse.description, apiResponse.buttonText ) // 发起批量翻译请求,指定目标语言(比如中文用"zh-CN") val translationResults = translateClient.translate( textsToTranslate, Translate.TranslateOption.targetLanguage("zh-CN") ) // 提取翻译后的结果 val translatedTitle = translationResults[0].translatedText val translatedDescription = translationResults[1].translatedText val translatedButtonText = translationResults[2].translatedText
方案二:通过REST API+Retrofit调用
如果是用Retrofit调用Google翻译的REST接口,先定义API接口:
interface TranslationApi { @GET("language/translate/v2") suspend fun batchTranslate( @Query("q") texts: List<String>, @Query("target") targetLang: String, @Query("key") apiKey: String ): TranslationResponse } // 对应翻译响应的数据类 data class TranslationResponse( val data: TranslationData ) data class TranslationData( val translations: List<TranslatedItem> ) data class TranslatedItem( val translatedText: String )
然后执行翻译请求:
val retrofit = Retrofit.Builder() .baseUrl("https://translation.googleapis.com/") .addConverterFactory(GsonConverterFactory.create()) .build() val translationApi = retrofit.create(TranslationApi::class.java) // 在协程中执行网络请求 lifecycleScope.launch { try { val response = translationApi.batchTranslate( textsToTranslate, "zh-CN", "YOUR_API_KEY" ) val translatedTexts = response.data.translations.map { it.translatedText } // 提取翻译结果 val translatedTitle = translatedTexts[0] val translatedDescription = translatedTexts[1] val translatedButtonText = translatedTexts[2] // 后续设置到控件 } catch (e: Exception) { // 处理请求失败,比如用原文本或提示语 } }
4. 将翻译结果设置到标签控件
直接找到对应的TextView/Button控件,设置翻译后的文本即可:
titleTextView.text = translatedTitle descriptionTextView.text = translatedDescription startButton.text = translatedButtonText
关键注意点
- 所有网络请求必须在异步线程执行,Kotlin用协程(lifecycleScope/ViewModelScope),Java用AsyncTask或ExecutorService,避免阻塞主线程。
- 建议缓存翻译结果,比如用SharedPreferences或Room存储已翻译的文本,重复场景下直接读取缓存,减少API调用次数和成本。
- 处理异常情况:网络中断、API密钥无效、翻译请求超时等,此时可以回退显示原始文本或默认提示语。
内容的提问来源于stack exchange,提问作者Yash Palkar
相关产品推荐
相关产品推荐

