[英]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
这个链接是我发现的唯一对我有用的来源,它比微软自己的文档更好(它省略了潜在的陷阱,比如没有以非常确定的方式命名你的资源文件)。
让我总结几点:
IStringLocalizer<MyController> _localizer;
然后在 controller 中,您可以本地化您的字符串,例如: _localizer["STRINGKEY"]
其中 STRINGKEY 是资源文件中的一个键。
确保正确命名您的资源文件。 这非常重要,据我所知微软没有记录。 花了我很多时间,直到我偶然发现上面提到的 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.