[英]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.