public function negotiate(Request $request)
    {
        $this->request = $request;

        if ( ! is_null($locale = $this->getFromAcceptedLanguagesHeader()))
            return $locale;

        if ( ! is_null($locale = $this->getFromHttpAcceptedLanguagesServer()))
            return $locale;

        if ( ! is_null($locale = $this->getFromRemoteHostServer()))
            return $locale;

        // TODO: Adding negotiate form IP Address ??

        return $this->defaultLocale;
    }