我想将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个字符串。因此,我将输入反序列化为JSON并遍历数据。这意味着我为每个字符串调用了Google翻译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'
}">
我得到了结果,因为out是我通过的输入顺序,
" { "data": { "translations": [ { "translatedText": "स्वागत हे", "detectedSourceLanguage": "en" }, { "translatedText": "शुभ प्रभात", "detectedSourceLanguage": "en" }, { "translatedText": "सुसंध्या", "detectedSourceLanguage": "en" }, { "translatedText": "सभी का स्वागत हैं", "detectedSourceLanguage": "en" }, { "translatedText": "शुभ रात्रि", "detectedSourceLanguage": "en" } ] } } "
这对正常测试很好。
现在回到我的输入中,我如何同时传递所有输入并与https调用的结果匹配。因为我没有任何输入顺序。我有结构的结构,它是子结构等...从我的输入中,如果我作为“搜索,上一页,下一页,Studen,Kovilpatti等”(源字符串)传递,则返回相同的顺序。这里如何匹配特定的结果是针对特定的源字符串。
Google是否希望您输入密钥以识别正确的回报?
答案 0 :(得分:0)
最后,我为我的逻辑找到了解决方案。在这里,我解释了如何解决这种情况。我们可以通过传递一些定界符来实现。在这里,我使用-(连字符)作为分隔符。
<cfset myStr = {'Name':'Kannan','State':'Tamilnadu','Country':'India','Position':'Projects Lead','Description':'Test translate API call'}>
以上是我的原始结构。我已经使用以下连字号来转换此结构键值,
<cfset convertString = ''>
<cfloop index='keys' list="#keyList#">
<cfset convertString = listAppend(convertString,structFind(myStr,keys),'-')>
</cfloop>
现在我的字符串看起来像 Tamilnadu-Kannan-Test翻译API调用-印度-项目负责人
我可以通过调用以下API在单个http调用中传递上述字符串,
<cfhttp url="https://translation.googleapis.com/language/translate/v2?key=myApiKey132" method="post" charset="utf-8" result="returnData">
<cfhttpparam type="header" name="Content-Type" value="application/json">
<cfhttpparam type="body" name="data" value="{
'q': '#convertString#',
'target': 'hi'
}">
</cfhttp>
因此,转换后的字符串应具有传递的分隔符,例如
现在,我可以根据自己的定界符-(连字符)遍历结果,并像下面的代码一样匹配我的结构键。
<cfset convertStr = {}>
<cfset apiResult = deserializeJSON(returnData.filecontent)>
<cfset a = 1>
<cfloop index="result" list="#apiResult.data.translations[1].translatedText#" delimiters="-">
<cfset structInsert(convertStr,listgetat(keyList,a),result)>
<cfset a = a+1>
</cfloop>
最后我得到了预期的结果。
原始结构
翻译后:
<cfdump var="#convertStr#" label="Google Translate Structure" />
谢谢您对这些的关注。