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).
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.
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 else 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 ) end break end end end endif (string.getLength ( sTranslated )<1) then sTranslated = sEnglish -- something went wrong, so revert to the English original endreturn sTranslated-------------------------------------------------------------------------------- end --------------------------------------------------------------------------------



November 24th, 2011
sam
Posted in