C# 如何在asp.net中使用本地化?
我试图弄清楚如何在ASP.NET中使用本地化,实际上我是按照Microsoft文档进行的,但现在我很困惑 这就是我目前所做的: 在C# 如何在asp.net中使用本地化?,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我试图弄清楚如何在ASP.NET中使用本地化,实际上我是按照Microsoft文档进行的,但现在我很困惑 这就是我目前所做的: 在Configure方法中,我添加了以下代码(在所有代码的顶部): 所以本质上我声明了两种受支持的语言,并将意大利语设置为默认值 然后在ConfigureServices中,我指定了ResourcesPath: services.AddLocalization(options => options.ResourcesPath = "Resources&q
Configure
方法中,我添加了以下代码(在所有代码的顶部):
所以本质上我声明了两种受支持的语言,并将意大利语设置为默认值
然后在ConfigureServices
中,我指定了ResourcesPath
:
services.AddLocalization(options => options.ResourcesPath = "Resources");
这实际上是文件夹内容:
我将.resx
文件的访问修改器设置为public
,然后在\u ViewImports.cshtml
中添加了以下内容:
@使用Microsoft.AspNetCore.Mvc.Localization
问题是,当我在视图中键入@Resources
时,我得到:
由于安全级别,无法访问“资源”
如果要在视图中访问控制器的本地化字符串,可以通过以下方式执行:
@inject IStringLocalizer<HomeController> localazier
只有当其中任何一个的区域性为空时,才会使用默认区域性。因此,您应该尽可能地关闭AcceptLanguageHeaderRequestCultureProvider,因为许多用户可能已经在他们的浏览器中定义了它,并且可能与之不同
这是一种仅从查询字符串或cookie获取它的方法,因此我建议您以这种方式实现它
services.Configure<RequestLocalizationOptions>(options =>
{
options.RequestCultureProviders = new List<IRequestCultureProvider>()
{
new QueryStringRequestCultureProvider(),
new CookieRequestCultureProvider()
};
});
services.Configure(选项=>
{
options.RequestCultureProviders=新列表()
{
新建QueryStringRequestCultureProvider(),
新CookiierRequestCultureProvider()
};
});
在设计模式下打开resx文件(只需双击该文件),并将访问修改器设置为公共,如下所示-
我发现下面这篇文章在处理本地化时非常有帮助-
你读过这篇文章吗?您应该插入一个IViewLocalizer
来访问您的资源。@poke,而不是访问@resources
?我发现通过属性而不是索引进行访问更有用。ASP.NET核心中没有这样的东西。为了使用静态资源
类,必须有一个此处不存在的代码生成步骤。另外,它将是静态的,ASP.NET内核通常完全避免静态。您是否尝试过在文化中使用en GB/en US。在加载StringLocalizer之前执行的控制器操作中,此值设置为什么?CultureInfo.CurrentCulture(你能把它打印到调试器上吗)我完成了你建议的所有步骤,当我启动软件时,我看到了“Login”,我在其中添加了这样的内容:@Localizer[“Login”]
,这很奇怪,因为文件AccountController.it it it.resx
的意大利文化值是Accedi
,怎么了?软件似乎无法定位区域性并显示索引Login
@Charanoglu。请将其置于调试中,然后查看是否找到本地化字符串。有一种财产是这样说的。您还需要将默认区域性定义为DefaultRequestCulture=new RequestCulture(“it”)。需要检查的属性是ResourceNotFound,其值应为false。当quick watch@localizaer[“Login”]快速查看时,会出现此问题。如果为真,则表示您没有适当的资源文件。查看是否从资源文件获取数据的另一种方法是添加query param?ui culture=it-it。Localizer
为空,这应该是.resx
文件的本地化问题?我不清楚该应用程序如何定位我能够修复的问题,似乎Visual Studio有时会卡住,所以我重新启动了VS,然后删除了所有的resx文件,创建了一个新的文件和所有的工作。这篇文章是从2011年开始的,涵盖的是ASP.NET MVC,而不是ASP.NET Core,所以我并不确信这在ASP.NET Core中会起作用。你能确认一下吗?我已经尝试过这个解决方案,但没有成功,现在的问题是@Localizer
甚至是空的
QueryStringRequestCultureProvider
CookieRequestCultureProvider
AcceptLanguageHeaderRequestCultureProvider
services.Configure<RequestLocalizationOptions>(options =>
{
options.RequestCultureProviders = new List<IRequestCultureProvider>()
{
new QueryStringRequestCultureProvider(),
new CookieRequestCultureProvider()
};
});