def get_recaptcha_html(public_key=None, use_ssl=True, error=None,
                       translations=None):
    _ = translations and translations.ugettext or (lambda x: x)
    server = use_ssl and API_SERVER or SSL_API_SERVER
    options = dict(k=public_key.encode('utf-8'))
    if error is not None:
        options['error'] = unicode(error).encode('utf-8')
    query = urlencode(options)
    return Markup(u'''
    <script type="text/javascript">var RecaptchaOptions = %(options)s;</script>
    <script type="text/javascript" src="%(script_url)s"></script>
    <noscript>
      <div><iframe src="%(frame_url)s" height="300" width="500"></iframe></div>
      <div><textarea name="recaptcha_challenge_field"
                     rows="3" cols="40"></textarea>
      <input type="hidden" name="recaptcha_response_field"
             value="manual_challenge"></div>
    </noscript>
    ''' % dict(
        script_url='%schallenge?%s' % (server, query),
        frame_url='%snoscript?%s' % (server, query),
        options=dumps({
            'theme':    'clean',
            'custom_translations': {
                'visual_challenge': _("Get a visual challenge"),
                'audio_challenge': _("Get an audio challenge"),
                'refresh_btn': _("Get a new challenge"),
                'instructions_visual': _("Type the two words:"),
                'instructions_audio': _("Type what you hear:"),
                'help_btn': _("Help"),
                'play_again': _("Play sound again"),
                'cant_hear_this': _("Download sound as MP3"),
                'incorrect_try_again': _("Incorrect. Try again.")
            }
        })
    ))
Returns the recaptcha input HTML.
dataset/ETHPy150Open mitsuhiko/fungiform/fungiform/recaptcha.py/get_recaptcha_html