def languages(self):
        """
        Get a list of supported languages and cache it.

        Examples
        --------

        >>> ideone_object.languages()
        {'error': 'OK',
         'languages': {1: "C++ (gcc-4.3.4)",
                       2: "Pascal (gpc) (gpc 20070904)",
                       ...
                       ...
                       ...
                       125: "Falcon (falcon-0.9.6.6)"}}

        """
        if self._language_dict is None:
            result = self.client.service.getLanguages(self.user, self.password)
            result_dict = Ideone._transform_to_dict(result)
            Ideone._handle_error(result_dict)
            languages = result_dict['languages']
            result_dict['languages'] = Ideone._collapse_language_array(languages)
            self._language_dict = result_dict['languages']
        return self._language_dict