In dnn 4.7, some extra code was added to DotNetNuke.Modules.Admin.Authentication.Login (\admin\Authentication\Login.ascx.vb), in order to allow for correct language setting after user login.
In dnn 4.8.1, after the user is succesfully validated, he is redirected to the return url. This happens in line 534 of flie \admin\Authentication\Login.ascx.vb:
Response.Redirect(RedirectURL, True)
Here lies the pain. RedirectUrl is a protected property in the same class, so you can not reference it from another class. However, it contains some key functionality. From line 179:
'replace language parameter in querystring, to make sure that user will see page in correct language
If UserId <> -1 Then
If User.Profile.PreferredLocale <> CultureInfo.CurrentCulture.Name Then
_RedirectURL = UrlUtils.replaceQSParam(_RedirectURL, "language", User.Profile.PreferredLocale)
End If
End If
What happens here is that the language parameter from the return url is changed into the preferred locale of the logged on user. If you are writing your own logon, you should at least mimic this behaviour, otherwise the user will not switch to the correct language.