在ASP.NET Core 3.1 MVC中实现本地化的解决方法包括以下步骤和代码示例:
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
services.Configure(options =>
{
var supportedCultures = new List
{
new CultureInfo("en-US"),
new CultureInfo("fr-FR"),
// 添加其他支持的语言
};
options.DefaultRequestCulture = new RequestCulture("en-US");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
}
创建资源文件以提供本地化字符串。在Resources文件夹下创建一个名为SharedResource.en-US.resx
的资源文件,并添加英文字符串。然后复制此文件并命名为SharedResource.fr-FR.resx
,并添加法语字符串。
在Controller中使用IStringLocalizer
来本地化视图中的字符串:
private readonly IStringLocalizer _localizer;
public HomeController(IStringLocalizer localizer)
{
_localizer = localizer;
}
public IActionResult Index()
{
ViewData["Message"] = _localizer["Welcome to our website!"];
return View();
}
@inject
指令注入IViewLocalizer
,并使用@Localizer[""]
来本地化视图中的字符串:@inject IViewLocalizer Localizer
@Localizer["Welcome"]
@Localizer["Hello, world!"]
@
符号和@Localizer[""]
来本地化表单验证错误消息:@Localizer["The {0} field is required.", @Html.DisplayNameFor(model => model.Name)]
[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddDays(30) }
);
return LocalRedirect(returnUrl);
}
这些步骤和代码示例可以帮助你在ASP.NET Core 3.1 MVC中实现本地化。请根据你的具体需求进行调整和扩展。