Globalization And Cultures
When DotVVM serializes the viewmodel, it includes an information about the current thread culture which was used to process the request.
If you use any control which works with numeric or date values (e.g. Literal with its FormatString
property),
the page needs to know which culture should be used in order to apply the correct format.
Default Culture
In the DotVVM configuration, you can specify the default culture which is used for all requests. The best way
is to set this value in the DotvvmStartup.cs
file using the following code:
config.DefaultCulture = "en-US";
Switching Cultures
The way how cultures are switched was changed in DotVVM 2.0 to handle asynchronous methods correctly.
If your website supports multiple languages and cultures, you need to store the language the user has selected somewhere. Whichever method you use (cookies, URL, database...), you need to tell DotVVM at the beginning of the request processing, which culture is used for the particular HTTP request.
This can be done by calling the Context.ChangeCurrentCulture
method. In simple scenarios, you can call it in the Init
method in the viewmodel.
In larger applications you'll probably create an action filter for that.
public override Task Init()
{
var lang = Context.Query["lang"];
if (lang == "cs")
{
Context.ChangeCurrentCulture("cs-CZ");
}
else
{
Context.ChangeCurrentCulture("en-US");
}
return base.Init();
}
The
Context.ChangeCurrentCulture
method is removed in DotVVM 2.0 and replaced by a localization presenter mechanism.