Monthly Archives: November 2011

Game Localisation with Google Translate

I recently wrote a Javascript-based tool which uses the Google Translate Ajax API to translate English phrases, as pasted into a textbox, into other languages. Pretty handy for games. Although the results from Google Translate can be a bit dodgy, I have found that they’re good enough to get version 1 done, and hopefully some interested player will come forward and offer to make improvements (they have for me, anyway), especially if this person is one of professional translators.

Each English phrase should be separated by a line-break, and there’s two output options:

1. If you choose a single translation language, you get the English and other language phrases interleaved in your output. So you can store each language in a separate file. This is what I used for the Darkwind client translations.

2. If you click ‘all to XML’ you’ll get a node per phrase, with each language’s translation as a parameter of the node. I have been using this in my Shiva games.. since Shiva data files are always in XML format, this gives me exactly what I need.

You can try it out here

And here’s some Lua code I have been using in Shiva to take a phrase and return its translation (it’s assumed that GameMainAI has a member variable called ‘sLanguage’ which is the target language, e.g. “uk”, “de”, “es”, “it”, “pt”):

function GameMainAI.doLocaliseOneString ( sEnglish, hXMLTable )

local lang = this.sLanguage ( )
local sTranslated = ""

if ( lang=="uk" ) then
   -- special case: English
   sTranslated = sEnglish
   local hRoot = xml.getRootElement ( hXMLTable )
   local count = xml.getElementChildCount ( hRoot )
   if ( count > 0 ) then
      for i=0, count-1 do
         local hElem = xml.getElementChildAt ( hRoot, i )
         local sPhrase = xml.getElementValue ( hElem )
         if ( sPhrase==sEnglish ) then
            local hAttrib = xml.getElementAttributeWithName ( hElem, lang )
            if ( hAttrib ) then
               sTranslated = xml.getAttributeValue ( hAttrib )

if (string.getLength ( sTranslated )<1) then
   sTranslated = sEnglish -- something went wrong, so revert to the English original

return sTranslated