【发布时间】:2019-09-13 15:35:16
【问题描述】:
我想将 N 个美国英语转换为其他一些语言。我有一个美国字符串为“JSON”格式,如下所示,
"AdminLocales": {
"-locale": "en_US",
"global": {
"search": "Search",
"noOrdersFound": "No Orders Found",
"prevPage": "Prev Page",
"nextPage": "Next Page"
},
"languageList": {
"1": {
"type": "Student",
"area": "Kovilpatti"
},
"2": {
"type": "Employee",
"area": "Tuticorin"
},
}
}
我想转换近 3000 个字符串。所以我反序列化了我的输入并循环了数据。这意味着我为每个字符串调用了谷歌翻译 API,所以我的 API 调用将是 3000 次。
所以我在该 API 中调用这么多时间时遇到了请求超时问题。就像下面的代码
<cfset myKey = 'abcd'>
<cfhttp url="https://translation.googleapis.com/language/translate/v2?key=#myKey#" method="post" charset="utf-8" result="getTokens">
<cfhttpparam type="header" name="Content-Type" value="application/json">
<cfhttpparam type="body" name="data" value="{
'q': 'Welcome',
'target': 'hi'
}">
</cfhttp>
我发现因为我们可以同时传递N个源字符串输入所以我传递它如下
<cfhttpparam type="body" name="data" value="{
'q': 'Welcome',
'q': 'Good Morning',
'q': 'Good Evening',
'q':'Welcome to all',
'q': 'Good night',
'target': 'hi'
}">
我得到了结果,因为输出与我通过的输入顺序相同,
" { "data": { "translations": [ { "translatedText": "स्वागत हे", "detectedSourceLanguage": "en" }, { "translatedText": "शुभ प्रभात", "detectedSourceLanguage": "en" }, { "translatedText": "सुसंध्या", "detectedSourceLanguage": "en" }, { "translatedText": "सभी का स्वागत हैं", "detectedSourceLanguage": "en" }, { "translatedText": "शुभ रात्रि", "detectedSourceLanguage": "en" } ] } } "
这对于正常测试来说很好。
现在回到我的输入,如何同时传递所有输入并匹配 https 调用的结果。因为我没有任何输入顺序。我有结构的结构,它是子结构等...从我的输入中,如果我传递为“搜索、上一页、下一页、Studen、Kovilpatti 等”(源字符串),它会返回相同的顺序。在这里,我如何匹配该特定结果是针对特定源字符串的。
Google 是否希望您传递一个密钥来识别正确的返回值?
【问题讨论】:
-
你可以控制源字符串吗?
-
是的。我有一个控制。 @Ageax
-
如果您正在构建 JSON 字符串,您可以使用“有序”结构(CF2016 中的新功能)来维护添加项目的顺序。否则,您可能必须使用数组手动跟踪订单。然后将其与 google 返回的数组匹配。 编辑 AFAIK,当您使用结构文字语法时,不支持有序结构,而不是任何版本。鉴于 JSON 的流行,这非常令人惊讶....
标签: json coldfusion google-translate google-translation-api