Android中无需浏览器调用Google Transliterate API实现音译需求
如何在无浏览器环境下使用Google Transliterate API(已弃用但仍可用)
嘿,刚好之前帮朋友折腾过这个弃用的API,虽然Google早在2011年就宣布不维护它了,但确实还能凑合用在这类轻量的商家名称转写场景里。你要在EditText输入时不用浏览器直接调用它,其实核心就是直接发HTTP请求调用API接口——毕竟API本质就是个网络服务,不需要浏览器来做中间层,我给你拆解下具体怎么实现:
核心调用逻辑:直接请求API接口
这个Transliterate API是个简单的GET接口,你只需要用开发平台的HTTP客户端(比如Android的OkHttp、Python的requests)发送请求,带上必要参数就能拿到转写结果。
关键请求参数
langpair:必填,语言转换对格式是源语言代码|目标语言代码,比如英文转印地语是en|hi,英文转中文是en|zh,你可以根据需要替换成目标地区的语言代码(找对应的ISO 639-1语言代码就行)text:必填,要转写的文本内容,比如Baskin Robbins- 可选参数:
tlqt(控制转写质量,默认1)、ie(请求编码,一般设为UTF-8)
示例1:Android平台(用OkHttp实现)
如果你是在Android里做EditText的实时转写,可以这么搞:
首先在build.gradle里添加OkHttp依赖:
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
然后写调用API的异步方法(别在主线程发网络请求哦):
import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.json.JSONArray; import org.json.JSONException; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; // 转写文本的方法 private void fetchTransliteration(String inputText, String langPair) { OkHttpClient client = new OkHttpClient(); // 对参数做URL编码,避免特殊字符报错 String encodedLangPair = URLEncoder.encode(langPair, StandardCharsets.UTF_8); String encodedText = URLEncoder.encode(inputText, StandardCharsets.UTF_8); String requestUrl = "https://www.google.com/transliterate?langpair=" + encodedLangPair + "&text=" + encodedText; Request request = new Request.Builder() .url(requestUrl) .build(); // 异步发送请求 client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { // 请求失败的处理,比如给用户提示 e.printStackTrace(); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful() && response.body() != null) { String responseJson = response.body().string(); // 解析返回的JSON(格式是二维数组:[["输入文本", ["转写结果1", "转写结果2"...]]]) try { JSONArray resultArray = new JSONArray(responseJson); if (resultArray.length() > 0) { JSONArray translOptions = resultArray.getJSONArray(0).getJSONArray(1); if (translOptions.length() > 0) { final String bestOption = translOptions.getString(0); // 回到主线程更新EditText runOnUiThread(() -> { // 这里替换成你的EditText实例 yourEditText.setText(bestOption); }); } } } catch (JSONException e) { e.printStackTrace(); } } } }); } // 调用示例:比如在EditText的文本变化监听里触发 // fetchTransliteration("Baskin Robbins", "en|hi");
示例2:Python平台(用requests实现)
如果是后端或者脚本场景,用Python的requests库更简单:
import requests import urllib.parse def get_transliteration(text, lang_pair): base_url = "https://www.google.com/transliterate" params = { "langpair": lang_pair, "text": text } # 编码参数 encoded_params = urllib.parse.urlencode(params) full_url = f"{base_url}?{encoded_params}" response = requests.get(full_url) if response.status_code == 200: result_data = response.json() # 取第一个转写结果 if result_data and len(result_data) > 0: return result_data[0][1][0] return None # 测试调用 print(get_transliteration("Baskin Robbins", "en|hi"))
重要注意事项
- 弃用风险:这个API已经弃用十几年了,Google随时可能关停它,建议你同时准备一个备用方案(比如本地转写库或者其他免费的替代API)
- 请求限制:Google会对请求频率做限制,别短时间内发太多请求,不然会被封IP
- 编码问题:一定要对
langpair和text做URL编码,不然特殊字符会导致请求失败 - 语言代码:确认目标地区语言的正确ISO代码,比如泰文是
th,阿拉伯文是ar,别用错了
内容的提问来源于stack exchange,提问作者Indark
相关产品推荐
相关产品推荐

