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

时间:2018-08-29 13:34:06

标签: c# asp.net-core asp.net-core-mvc

我试图弄清楚如何在ASP.NET中使用本地化,我实际上遵循了Microsoft文档,但是现在我很困惑。

这是我到目前为止所做的:

Configure方法中,我添加了以下代码(位于所有代码的顶部):

var supportedCultures = new[]
{
   new CultureInfo("it-IT"),
   new CultureInfo("en-EN")
};

app.UseRequestLocalization(new RequestLocalizationOptions
{
   DefaultRequestCulture = new RequestCulture("it"),
   SupportedCultures = supportedCultures,
   SupportedUICultures = supportedCultures
});

因此,基本上我声明了两种受支持的语言,并将意大利语设置为默认语言。

然后在ConfigureServices内指定ResourcesPath

services.AddLocalization(options => options.ResourcesPath = "Resources");

这实际上是文件夹内容:

enter image description here

我为两个.resx文件都设置了访问修饰符为public,然后在_ViewImports.cshtml内添加了这个内容:

@使用Microsoft.AspNetCore.Mvc.Localization

问题是,当我在@Resources中键入View时,我得到:

  

由于安全级别,无法访问“资源”

2 个答案:

答案 0 :(得分:1)

如果您想在视图中访问控制器的本地化字符串,可以这样做:

@inject IStringLocalizer<HomeController> localazier

之后@localazier["YourKey"]

我建议您为示例SharedResources在项目中创建一个空类,并为其创建特定的resx文件,然后在@inject IStringLocalizer<SharedResources> localazier处随处使用它

另外,可能的问题是您的默认区域性。 Asp.net核心将文化纳入这三个地方之一:

QueryStringRequestCultureProvider
CookieRequestCultureProvider
AcceptLanguageHeaderRequestCultureProvider

,并且仅当任何区域的区域性为空时,才会采用默认区域性。因此,您应尽可能关闭AcceptLanguageHeaderRequestCultureProvider,因为许多用户可能已经在其浏览器中对其进行了定义,并且可能与IT有所不同。

这是仅从查询字符串或cookie中获取它的方法,因此我建议您以这种方式实现它。

services.Configure<RequestLocalizationOptions>(options =>
{
    options.RequestCultureProviders = new List<IRequestCultureProvider>()
    {
        new QueryStringRequestCultureProvider(),
        new CookieRequestCultureProvider()
    };
});

答案 1 :(得分:0)

在设计模式下打开resx文件(只需双击该文件),然后将访问修饰符设置为public,如下所示-

enter image description here

在进行本地化工作时,我发现以下这篇文章有很大帮助-

http://afana.me/archive/2011/01/14/aspnet-mvc-internationalization.aspx/