c# - 如何在 asp.net 中使用本地化?
问题描述
我试图弄清楚如何在 中使用本地化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
在 a 内输入时,View
我得到:
由于安全级别,“资源”无法访问
解决方案
如果你想在视图中访问控制器的本地化字符串,你可以这样做:
@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()
};
});
推荐阅读
- database - VB.NET如何在函数中传递数据库的值
- python - 如何使用 pandas 和 sqlalchemy 将 VARIANT 或 ARRAY 数据类型插入 Snowflake
- javascript - 即使我的 HTMLCollection 有 10 个元素, slides[0] 返回未定义?
- java - 我只能用 Kotlin 获取 html 源代码的 div 吗?
- ios - 我的位置相同,但节点不在同一个地方?
- r - 根据类变量转换一个变量
- javascript - 如何访问用户上传的 EPUB 文件中每一章的原始文本
- machine-learning - 检查目标时出错:预期 dense_2 有 2 个维度,但得到了形状为 (2, 3, 3) 的数组
- reactjs - 从 package.json 安装依赖项后如何运行反应项目
- python - 如果列表有共同的子列表,如何对列表进行分组?