Translate a human readable langauge name into its Ideone
        integer representation.

        Keyword Arguments
        -----------------

        * langauge_name: a string of the language (e.g. "c++")

        Returns
        -------

        An integer representation of the language.

        Notes
        -----

        We use a local cache of languages if available, else we grab
        the list of languages from Ideone.  We test for a string match
        by comparing prefixes because Ideone includes the language
        compiler name and version number.  Both strings are converted
        to lower case before the comparison.

        Examples
        --------

        >>> ideone_object = Ideone('username', 'password')
        >>> ideone_object._translate_language_name('ada')
        7

def _translate_language_name(self, language_name):
        """
        Translate a human readable langauge name into its Ideone
        integer representation.

        Keyword Arguments
        -----------------

        * langauge_name: a string of the language (e.g. "c++")

        Returns
        -------

        An integer representation of the language.

        Notes
        -----

        We use a local cache of languages if available, else we grab
        the list of languages from Ideone.  We test for a string match
        by comparing prefixes because Ideone includes the language
        compiler name and version number.  Both strings are converted
        to lower case before the comparison.

        Examples
        --------

        >>> ideone_object = Ideone('username', 'password')
        >>> ideone_object._translate_language_name('ada')
        7

        """

        languages = self.languages()
        language_id = None

        # Check for exact match first including the whole version
        # string
        for ideone_index, ideone_language in languages.items():
            if ideone_language.lower() == language_name.lower():
                return ideone_index

        # Check for a match of just the language name without any
        # version information
        simple_languages = dict((k,v.split('(')[0].strip())
                                for (k,v) in languages.items())
        for ideone_index, simple_name in simple_languages.items():
            if simple_name.lower() == language_name.lower():
                return ideone_index

        # Give up, but first find a similar name, suggest it and error
        # out
        language_choices = languages.values() + simple_languages.values()
        similar_choices = difflib.get_close_matches(language_name,
                                                    language_choices,
                                                    n=3,
                                                    cutoff=0.3)
        # Add quotes and delimit with strings for easier to read
        # output
        similar_choices_string = ", ".join(["'" + s + "'"
                                            for s in similar_choices])
        error_string = ("Couldn't match '%s' to an Ideone accepted language.\n"
                        "Did you mean one of the following: %s")
        raise IdeoneError(error_string % (language_name, similar_choices_string))