我试图弄清楚如何在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");
这实际上是文件夹内容:
我为两个.resx
文件都设置了访问修饰符为public
,然后在_ViewImports.cshtml
内添加了这个内容:
@使用Microsoft.AspNetCore.Mvc.Localization
问题是,当我在@Resources
中键入View
时,我得到:
由于安全级别,无法访问“资源”
答案 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,如下所示-
在进行本地化工作时,我发现以下这篇文章有很大帮助-
http://afana.me/archive/2011/01/14/aspnet-mvc-internationalization.aspx/