ASP.Net Core Localization
See github source, sample
TODO: based on pre-release RC2, to be updated to RTM
Nuget packages
- "Microsoft.Extensions.Localization"
- "Microsoft.AspNetCore.Localization"
RequestLocalizationOptions
RequestLocalizationOptions are configured in Startup.
There are 3 built-in providers to set the culture of a request: QueryStringRequestCultureProvider, CookieRequest ("ASPNET_CULTURE" cookie) and AcceptLanguageHeader
You can set the cookie in an action method
[HttpPost] public IActionResult SetLanguage(string culture, string returnUrl) { Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)), new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) } ); return LocalRedirect(returnUrl); }
Startup
- Startup.ConfigureServices: services.AddLocalization(options => options.ResourcesPath = "ResourcesFolder")
The ResourcesPath is the folder containing the .resx files.
services.AddMvc() // Add support for finding localized views, based on file name suffix, e.g. Index.fr.cshtml .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) // Add support for localizing strings in data annotations (e.g. validation messages) .AddDataAnnotationsLocalization();
- Startup.Configure:
app.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("en-US"), SupportedCultures = new List<CultureInfo> { new CultureInfo("en-US"), new CultureInfo("en-GB") } });
In controllers, the ctor asks for IHtmlLocalizer<resourceName>.
public class AboutController : Controller { private IHtmlLocalizer<AmazingResource> _htmlLocalizer; public AboutController(IHtmlLocalizer<AmazingResource> localizer) { _htmlLocalizer = localizer; } [HttpGet] public string Get() { return _htmlLocalizer["Name"]; } }
Access localization via features
var requestCultureFeature = context.Features.Get<IRequestCultureFeature>(); var requestCulture = requestCultureFeature.RequestCulture;
Views
The one nice use-case for dependency injection into views, and there's a tag-helper (the string is the key).
@inject IViewLocalizer Localizer @{ ViewData["Title"] = Localizer["Home Page"]; } <p>@Localizer("Will be localized") </p> <p asp-loc>This will be localized</p>