Index: html/js/translatepage.js
===================================================================
--- html/js/translatepage.js	(revision 13970)
+++ html/js/translatepage.js	(working copy)
@@ -93,6 +93,55 @@
     $(this).parent().parent().parent().find("textarea").toggleClass("translate-translation-fuzzy");
   });
 
+/*
+ * GOOGLE TRANSLATE
+ */
+  $(".googletranslate").click(function(){
+    var id = this.name.replace("googleapi", "");
+    var orig = $("#orig" + id);
+    var area = $("#areatrans" + id);
+    var orig = orig.find("div.translation-text");
+    var orig_text = orig.html();
+    var lang_from = orig.attr("lang");
+    var lang_to = area.attr("lang");
+	
+    // The printf regex based on http://phpjs.org/functions/sprintf:522
+    var c_printf_pattern = /%%|%(\d+\$)?([-+\'#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g;
+    var csharp_string_format_pattern = /{\d+(,\d+)?(:[a-zA-Z ]+)?}/g;
+    var percent_number_pattern = /%\d+/g;
+    var pos = 0;
+    var argument_subs = new Array();
+    var collectArguments = function (substring) {
+      if (substring == '%%') {return '%%';}
+      argument_subs[pos] = substring;
+      substitute_string = "__" + pos + "__";
+      pos = pos + 1;
+      return substitute_string;
+    }
+    orig_text = orig_text.replace(c_printf_pattern, collectArguments);
+    orig_text = orig_text.replace(csharp_string_format_pattern, collectArguments);
+    orig_text = orig_text.replace(percent_number_pattern, collectArguments);
+	
+    var content = new Object()
+    content.text = orig_text
+    content.type = "text"
+    google.language.translate(content, lang_from, lang_to, function(result) {
+      if (result.translation) {
+        var translation = result.translation;
+        for (var i=0; i<argument_subs.length; i++) 
+          translation = translation.replace("__" + i + "__", argument_subs[i]); 
+        area.val(translation);
+        area.addClass("translate-translation-fuzzy");
+        var checkbox = $("input.fuzzycheck");
+        checkbox.attr("checked", "checked");
+        area.focus();
+        keepstate = true; 
+      } else {
+        alert("Google Translate Error: " + result.error.message); 
+      }
+  });
+	return false;
+  });
 
 /*
  * SUGGESTIONS
Index: local_apps/pootle_app/templates/language/translatepage.html
===================================================================
--- local_apps/pootle_app/templates/language/translatepage.html	(revision 13970)
+++ local_apps/pootle_app/templates/language/translatepage.html	(working copy)
@@ -214,6 +214,9 @@
                                   {% ifequal button 'back' %}
                                   <input type="submit" name="back{{ item.trans.buttons.item }}" accesskey="b" value="{% trans 'Back' %}" />
                                   {% endifequal %}
+                                  {% ifequal button 'googletranslate' %}
+                                  <input type="submit" class="googletranslate" name="googleapi{{ item.trans.buttons.item }}" value="{% trans 'Google Translate' %}"/>
+                                  {% endifequal %}
                               {% endfor %}
                                   <input type="hidden" name="store" value="{{ store }}" />
                   <input type="hidden" name="path" value="{{ store|l }}" />
@@ -322,6 +325,10 @@
 {% block scripts_extra %}
 {{ block.super }}
 <script src='{{ "js/json2.min.js"|m }}' type="text/javascript"></script>
+<script src="http://www.google.com/jsapi" type="text/javascript"></script>
+<script type="text/javascript">
+	google.load("language", "1");
+</script>
 <script src='{{ "js/translatepage.js"|m }}' type="text/javascript"></script>
 <script src='{{ "js/jquery/jquery.fieldselection.js"|m }}' type="text/javascript"></script>
 {% endblock scripts_extra %}
Index: local_apps/pootle_app/views/language/translate_page.py
===================================================================
--- local_apps/pootle_app/views/language/translate_page.py	(revision 13970)
+++ local_apps/pootle_app/views/language/translate_page.py	(working copy)
@@ -370,7 +370,7 @@
         transdict = { "rows": profile.input_height }
         focusbox = ""
         if len(trans) > 1:
-            buttons = get_trans_buttons(request, request.translation_project, item, ["translate", "suggest", "copy", "skip", "back"])
+            buttons = get_trans_buttons(request, request.translation_project, item, ["translate", "suggest", "copy", "skip", "back", "googletranslate"])
             forms = []
             for pluralitem, pluraltext in enumerate(trans):
                 pluralform = _("Plural Form %d", pluralitem)
@@ -381,7 +381,7 @@
                     focusbox = textid
             transdict["forms"] = forms
         elif trans:
-            buttons = get_trans_buttons(request, request.translation_project, item, ["translate", "suggest", "copy", "skip", "back"])
+            buttons = get_trans_buttons(request, request.translation_project, item, ["translate", "suggest", "copy", "skip", "back", "googletranslate"])
             transdict["text"] = escape_for_textarea(trans[0])
             textid = "trans%d" % item
             focusbox = textid
