Cookie value to enum
You query HttpContext.Current.Request.Cookies.Get("lang") twice. Access it once and store it in a variable.  
You will get a problem if in the future you have to support more than 9 languages. Instead of accessing the last char from langCookie you should Split() langCookie by = and take the second array element. You can then use [Enum].TryParse() to get the enum.  
Some horizontal spacing (new lines) would help to easier read the code.  


Your code could look like so  

Public Function GetLangFromCookie() As Language

    Dim langCookie = HttpContext.Current.Request.Cookies.Get("lang")

    If langCookie Is Nothing Then
        Return Language.English
    Else
        Return GetLanguage(langCookie.Value)
    End If

End Function

Private Function GetLanguage(languageCookieValue As String) As Language

    Dim splittetCookieValue As String() = languageCookieValue.Split(New String() {"="}, StringSplitOptions.RemoveEmptyEntries)

    Dim languageIdentifier As String = splittetCookieValue.LastOrDefault()

    Dim foundLanguage As Language

    ' We don't care about the success of the TryParse() call
    [Enum].TryParse(Of Language)(languageIdentifier, foundLanguage)

    ' because foundLanguage will be 0 if it doesn't succeed and will be checked here
    Return If(foundLanguage = Language.Undefined, Language.English, foundLanguage)

End Function