【发布时间】:2021-01-20 16:14:31
【问题描述】:
正如标题所说的本地化不起作用,我得到的只是 key 而不是这里的 value 是所有必要的代码。
配置服务
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddControllersWithViews();
services.AddRazorPages();
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc().AddDataAnnotationsLocalization().AddViewLocalization(Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix, options =>
options.ResourcesPath = "Resources");
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo("en"),
new CultureInfo("sr")
};
options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("en");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
}
配置
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseRequestLocalization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
控制器
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public IStringLocalizer<Resource> _localizer;
public HomeController(
ILogger<HomeController> logger,
IStringLocalizer<Resource> localizer)
{
_logger = logger;
_localizer = localizer;
}
public IActionResult Index()
{
return View();
}
[HandleError]
public IActionResult Privacy()
{
throw new Exception();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
资源
namespace WebApplication.Resources
{
public class Resource
{
}
}
索引.cshtml
@{
ViewData["Title"] = "Home Page";
}
@using Microsoft.Extensions.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using WebApplication.Resources
@inject IStringLocalizer<Resource> localizer
@inject IViewLocalizer _localizer
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
<p>@localizer["Hello"]</p>
<p>@_localizer["Hello"]</p>
</div>
在 Resources 文件夹中,我有类 Resource 和两个 .resx 文件(Resource.en.resx、Resource.sr.resx),它们都包含一个键 Hello。在视图中,我尝试使用 IStringLocalizer 和 IViewLocalizer 显示该键的值,但没有运气。谁能告诉我问题出在哪里,我做错了什么!
【问题讨论】:
标签: c# asp.net-core .net-core localization