Asp.net core ASP.NET Core 3.0中的本地化
我正在尝试使用.resx文件将我的项目本地化 对我来说,它不起作用,对我的同事来说,他也在做这个项目,它起作用了 有关代码的一些详细信息: Startup.cs文件Asp.net core ASP.NET Core 3.0中的本地化,asp.net-core,asp.net-core-localization,Asp.net Core,Asp.net Core Localization,我正在尝试使用.resx文件将我的项目本地化 对我来说,它不起作用,对我的同事来说,他也在做这个项目,它起作用了 有关代码的一些详细信息: Startup.cs文件 public void ConfigureServices(IServiceCollection services) { . . . // Localization services.AddLo
public void ConfigureServices(IServiceCollection services)
{
.
.
.
// Localization
services.AddLocalization(options => options.ResourcesPath = "Lang/");
services.AddMvc(option => option.EnableEndpointRouting = false)
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new List<CultureInfo>
{
new CultureInfo("cs"),
//new CultureInfo("en")
};
options.DefaultRequestCulture = new RequestCulture(culture: "cs", uiCulture: "cs");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
services.AddTransient<Messages>();
// Localization end
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
// Localization
var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(locOptions.Value);
// Localization end
.
.
.
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
对我来说,它返回TitleLogin,值ResourceNotFound为true
对于我的同事,它使用相同的代码返回正确的值
你能帮帮我吗?我做错了什么
非常感谢。我不知道哪个resx文件包含TitleLogin。为了显示正确的本地化数据,当我修改服务时,它会出错。AddLocalizationoptions=>options.ResourcesPath=Lang/;到 然后在Lang文件夹中添加名为Views.Account.Login.cs.resx的resx文件 更新日期:2020年3月19日 事实证明,在asp.net core 3.1中,您需要将Default.cs从Resources文件夹中移出您的Lang文件夹,请参见此 如果类Default.cs和Default.*.resx位于同一文件夹中,则已编译的dll xxx.lang.dll中的命名空间将出错 因此,解决办法是 1.删除原来的Default.cs,直接在项目下新建一个:
namespace MyApp
{
public class Default
{
}
}
2.在Lang文件夹中添加Default.cs.resx
3._ViewImports.cshtml
@using MyApp
@using Microsoft.Extensions.Localization
@inject IStringLocalizer<Default> LangDefault
非常感谢你的建议。这是可行的,但我希望只有很少的resx文件,因为每个视图都有很多常见的消息。TitleLogin包含在Default.cs.resx中,所以我想使用LangDefault[TitleLogin],但找到的值为null…我只想添加,在ViewImports中我有@inject IStringLocalizer LangDefault。。。当我在LangDefault->Non-Public members->\u localizer->Non-Public members->\u missingManifestCache中查找时,我可以在那里找到我的标题登录,但值为null…@Lukas我发现这是一个突破性的更改,请检查我编辑的答案。
services.AddLocalization(options => options.ResourcesPath = "Lang");
namespace MyApp
{
public class Default
{
}
}
@using MyApp
@using Microsoft.Extensions.Localization
@inject IStringLocalizer<Default> LangDefault