Programming C#

ASP.NET Core Localization

Resource

Create resource file Message.resx Message.vi-VN.resx

Message.resx

<?xml version="1.0" encoding="utf-8"?>
<root>
  <data name="Welcome" xml:space="preserve">
    <value>Welcome Ladies and Gentlemen</value>
  </data>
</root>

Message.vi-VN.resx

<?xml version="1.0" encoding="utf-8"?>
<root>
  <data name="Welcome" xml:space="preserve">
    <value>Chào quí bà và quí ông</value>
  </data>
</root>

Using in View

@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer localizer
@localizer["Welcome"]

Using in Controller

public class HomeController : Controller{
    IStringLocalizer<HomeController> localizer;
    public HomeController(IStringLocalizer<HomeController> localizer) 
        => this.localizer = localizer;
    public IActionResult Index(){
        ViewData["Title"] = localizer["Title"];
        return View();
    }
}

Config

CultureInfo[] cultures = {
    new CultureInfo("en-US"),
    new CultureInfo("vi-VN")
};
builder.Services.Configure<RequestLocalizationOptions>(op => {
    op.DefaultRequestCulture = new RequestCulture("vi-VN");
    op.SupportedCultures= cultures;
    op.SupportedUICultures= cultures;
    op.RequestCultureProviders = new List<IRequestCultureProvider>{
        new QueryStringRequestCultureProvider(),
        new CookieRequestCultureProvider(),
    };
});
app.UseRequestLocalization();

Request

http://cse.net.vn?culture=vi-VN

http://cse.net.vn?culture=en-US

Cookies

Response.Cookies.Append(CookieRequestCultureProvider.DefaultCookieName,
	CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(c)), 
	new CookieOptions {  Expires = DateTimeOffset.UtcNow.AddMonths(1) }
);