Hello,
On BeginRequest event I check and set user language settings. First I
check for browser's accepted languages and set Cultureinfo. If
browserlanguage is not supported, CultureInfo is set to a predefined
defaultvalue (en-US).
However, a visitor must be able to manualy change the language
settings. This is done by querystring-parameter.
Above works great, but whenever the next page is loaded, CultureInfo is
reset to browserlanguage. I can't find a way to store a bool value,
indicating browserlanguage/default language has been set before. I
tried the Runtime Cache, but this doesn't seem to be persistant.
TIA
###
This is what my code looks like ...
private void context_BeginRequest(object sender, EventArgs e)
{
HttpRequest request = ((HttpApplication)sender).Request;
// browser language
if (request.ServerVariables["HTTP_ACCEPT_LANGUAGE"] != null)
{
_httpAcceptLanguage =
request.ServerVariables["HTTP_ACCEPT_LANGUAGE"];
}
// check for manual language-switch
NameValueCollection queryString = request.QueryString;
LoadCulture(ref queryString);
}
private void LoadCulture(ref NameValueCollection qstring)
{
if (qstring != null && qstring["lan"] != null)
{
try
{
Thread.CurrentThread.CurrentCulture = new
CultureInfo(qstring["lan"].Trim());
}
catch
{
this.LoadDefaultCulture();
}
finally
{
setCulture();
}
}
else if ( HttpRuntime.Cache["BrowserLanguageIsSet"] == null )
{
// if no language is set, try to set browser language
// unsupported browserlanguage will load default
if (_httpAcceptLanguage != string.Empty)
{
setBrowserLanguage();
}
else
{
this.LoadDefaultCulture();
}
HttpRuntime.Cache.Insert("BrowserLanguageIsSet", true, null);
setCulture();
}
}