簡體   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