public function loadLanguage( $controller, $language = 'en_US', $return = FALSE )
    {
        $langDirEvent = new GetLanguageDirEvent();

        $this->dispatcher->fire( Events::EVENT_GET_LANG_DIR, $langDirEvent );

        $langDir = $langDirEvent->getLangDir();

        $retVal = FALSE;

        if ( NULL === $langDir )
        {
            $retVal = FALSE;
        }
        else
        {
            $file = $langDir . $controller . DS . $language . '_lang.php';

            if ( !file_exists( $file ) )
            {
                $defaultLangEvent = new GetDefaultLanguageEvent();

                $this->dispatcher->fire( Events::EVENT_GET_DEFAULT_LANG, $defaultLangEvent );

                $defaultLang = $defaultLangEvent->getDefaultLanguage();

                if ( NULL === $defaultLang )
                {
                    $retval = FALSE;
                }
                else
                {
                    $file = $langDir
                        . $controller . DS
                        . $defaultLang
                        . '_lang.php';
                }
            }

            if ( NULL === $file )
            {
                throw new RawException( 'Failed to load language file for ' . $controller );
            }

            $lang = include_once $file;

            $this->language = array_merge( $this->language, $lang );

            $retVal = $lang;
        }

        return $retVal;
    }