Become a Patron!

My Amazon wishlist can be found here.

Life Line

Translating Twitter, part 2

A while ago I wrote in an article about translating tweets in my client Haunt. For the translating itself I was using the Google Translate API, which has sadly be deprecated. Evil after all I suppose.

I've now rewritten my translation code to use the Bing Translation APIs instead. You need to register an API key (see to be able to use the APIs. The APIs that I am using are fairly simple though.

For a simple translation, requesting[yourappid]&to=en&text=[yourtext] is all you need to do. It will auto-detect the language for you as well.

However, it does not return the detected language, so I had to resort to using two requests in order to reimplement the same functionality that I had before with the Google APIs. I also found that it was easier to use the Http and not the Ajax variant of the API. It requires using SimpleXML to get to the data, but at least you do not have to fight with the BOM (Byte-order mark) and quoting.

The full code looks like:

$apiBase = '';
$appId = 'yourappid';
$text = urlencode( 'Een hoge boom vangt veel wind' );

$language = (string) simplexml_load_string(

$inEnglish = (string) simplexml_load_string(

var_dump( $language, $inEnglish );

with as output:

string(2) "nl"
string(34) "A high tree catches a lot of wind."


This article has a short URL available:


Any reason to use simplexml_load_string(file_get_contents()) instead of just simplexml_load_file() ?

Derick said:

I had to resort to using two requests...

By using the GetTranslations service, the detected source language and the translation can be found with one request. Admittedly, it's a little bit messy (needing a POST request) but it saves waiting around for two request/response cycles.

An example, which appears to work, based on the code in your article can be found at .

@Ilia: No reason, it's just that I debugged with file_get_contents() first.

@Peter: I'll update the article again... I'd missed this API.

Add Comment


Will not be posted. Please leave empty instead of filling in garbage though!

Please follow the reStructured Text format. Do not use the comment form to report issues in software, use the relevant issue tracker. I will not answer them here.

All comments are moderated