Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在asp.net中使用本地化?_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 如何在asp.net中使用本地化?

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

我试图弄清楚如何在ASP.NET中使用本地化,实际上我是按照Microsoft文档进行的,但现在我很困惑

这就是我目前所做的:

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()
    };
});