Translate Chatter Feed | Text Translation API


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:
? 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>();
for(FeedItem fi:{
feedMap.put(fi.Id, fi.Body);
ChatterFeedTranslateCntrl.isFirstTime = false;


public class ChatterFeedTranslateCntrl {
public static Boolean isFirstTime = 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 = ''+APIKey+'&text='+feedBody+'&lang='+langTranslation+'&%5Bformat=plain&#39;;
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.
// Compute the grand total price for all invoices.
feedBodyStr = parser.getText();
system.debug('feedBodyStr=' + feedBodyStr);
fItemList[0].Body = feedBodyStr;
update fItemList;



Arun Kumar


Arun Kumar

Arun Kumar is a Certified Salesforce developer and Salesforce Champions (Platform Champions), a Computer Science graduate, working on the Salesforce platform and providing customer solutions using as a Salesforce consultant/developer. He is the founder of SFDCLessons. :)

Leave a Reply