Text translation API can dynamically translate the different languages:
In this post, I am going to use Yandex Translate Text API to translate chatter feed(text). It uses a hybrid model of machine translation that includes both neural network (deep learning) and statistical approaches.
Yandex Translate Text API is a free API that we can use for translation. You just need to signup to get APIKEY.
API Request syntax:
https://translate.yandex.net/api/v1.5/tr.json/translate
? key=<API key>
& text=<text to translate>
& lang=<translation direction>
& [format=<text format>]
& [options=<translation options>]
& [callback=<name of the callback function>]
Query Parameters | Description |
key | APIKEY: It is issued free of charge. |
text | The text to translate. You can use multiple text parameters in a request. The source text must be URL-encoded. |
lang | The translation direction. You can set it in either of the following ways: As a pair of language codes separated by a hyphen (“from”-“to”). For example, en-hi indicates translating from English to Hindi. |
format | Text format. plain – Text without markup (default value). html – Text in HTML format. |
options | The only option available at this time is whether the response should include the automatically detected language of the text being translated. This corresponds to the value 1 for this parameter. |
callback | The name of the callback function. Use for getting a JSONP response. |
Chatter feed translation example code:
Trigger on FeedItem sObject:
trigger FeedTranslateTrigger on FeedItem (after insert) { | |
Map<String,String> feedMap = new Map<String,String>(); | |
if(Trigger.isAfter){ | |
if(Trigger.isInsert){ | |
for(FeedItem fi: Trigger.new){ | |
feedMap.put(fi.Id, fi.Body); | |
} | |
if(ChatterFeedTranslateCntrl.isFirstTime){ | |
ChatterFeedTranslateCntrl.isFirstTime = false; | |
ChatterFeedTranslateCntrl.translateFeed(feedMap); | |
} | |
} | |
} | |
} |
ChatterFeedTranslateCntrl
public class ChatterFeedTranslateCntrl { | |
public static Boolean isFirstTime = true; | |
@Future(callout=true) | |
public static void translateFeed(Map<String,String> feedMap) { | |
String feedBody = feedMap.values()[0].replaceAll('<[/a-zAZ0-9]*>',''); | |
feedBody = feedBody.replace(' ','%20'); | |
system.debug('feedBody = '+feedBody); | |
Set<String> feedItemIds = feedMap.keySet(); | |
List<FeedItem> fItemList = [select Id,Body from FeedItem where id IN:feedItemIds]; | |
system.debug('fItemList: ' +fItemList); | |
HttpRequest reqest = new HttpRequest(); | |
String APIKey = 'trnsl.1.1.20191130T125129Z.74852570ba317630.62b74fb91590782bc383c79786987364XXXXXXXXXX'; //APIKey | |
String langTranslation = 'en-hi';//english into Hindi | |
String endPointURL = 'https://translate.yandex.net/api/v1.5/tr.json/translate?key='+APIKey+'&text='+feedBody+'&lang='+langTranslation+'&%5Bformat=plain'; | |
reqest.setEndpoint(endPointURL); | |
reqest.setMethod('GET'); | |
reqest.setHeader('Accept','application/json'); | |
Http h = new Http(); | |
HTTPResponse response = h.send(reqest); | |
system.debug('response: '+response.getBody()); | |
string jsonResponse = response.getBody().replace('[',''); | |
jsonResponse = jsonResponse.replace(']',''); | |
system.debug('jsonResponse; '+jsonResponse); | |
// Parse JSON response to get all the totalPrice field values. | |
JSONParser parser = JSON.createParser(jsonResponse); | |
String feedBodyStr = ''; | |
while (parser.nextToken() != null) { | |
if ((parser.getCurrentToken() == JSONToken.FIELD_NAME) && | |
(parser.getText() == 'text')) { | |
// Get the value. | |
parser.nextToken(); | |
// Compute the grand total price for all invoices. | |
feedBodyStr = parser.getText(); | |
} | |
} | |
system.debug('feedBodyStr=' + feedBodyStr); | |
fItemList[0].Body = feedBodyStr; | |
update fItemList; | |
} | |
} |
Thanks
Arun Kumar