繁体   English   中英

ASP.NET 运行时核心资源本地化

[英]ASP.NET Core resource localization at runtime

我正在尝试本地化托管服务以响应变量lang中提供的运行时条件,该变量表示 2 个字母的 ISO 代码(例如 'en'、'es'、...)。

我在我的 Startup.cs 中设置了本地化服务,如下所示:

services.AddLocalization(options => { options.ResourcesPath = "xresx"; });

在我的 controller 我有以下代码:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(lang);

我知道这行得通,因为当我传入lang='es'时,以下内容:

var check = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName;

返回正确的值check = 'es'

但是接下来的声明:

var msg = Resources.TestMsg

从我的英语资源文件Resource.resx而不是Resource.es.resx中获取我的值。

我做错了什么,我怎样才能让它发挥作用? 谢谢!

好的,所以最终对我有用的是完全按照本指南中的步骤操作: https://joonasw.net/view/aspnet-core-localization-deep-dive

好的,所以最终对我有用的是完全按照本指南中的步骤操作: https://joonasw.net/view/aspnet-core-localization-deep-dive

这个链接是我发现的唯一对我有用的来源,它比微软自己的文档更好(它省略了潜在的陷阱,比如没有以非常确定的方式命名你的资源文件)。

让我总结几点:

  1. 需要将 IStringLocalizer 注入 Controller,例如: IStringLocalizer<MyController> _localizer;
  1. 然后在 controller 中,您可以本地化您的字符串,例如: _localizer["STRINGKEY"]其中 STRINGKEY 是资源文件中的一个键。

  2. 确保正确命名您的资源文件。 这非常重要,据我所知微软没有记录。 花了我很多时间,直到我偶然发现上面提到的 web 链接:我将我的文件命名为: Resource.resx, Resource.es.resx等,并且本地化没有找到值,而只是返回钥匙本身。 例如, _localizer["STRINGKEY]"将返回 "STRINGKEY" 而不是资源文件中的相应值。 因此,您必须使用 Controller 的名称来命名文件,例如: Controllers.MyController.resx, Controllers.MyController.es.resx

这些是要记住的要点。 可悲的是,微软文档掩盖了很多这样的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM