.NET Core WebApi 多語言本地化,動態切換多語言 原生的.net core webapi 動態多語言本地話 具體更多詳細內容,可以參考官方文檔 首先看效果圖 整體項目結構圖 ==開始前需要講一些重要的點== 1.是通過文件命名空間的路徑去找尋的,比如 Resource.cs 是在和多語 ...
.NET Core WebApi 多語言本地化,動態切換多語言
-
原生的.net core webapi 動態多語言本地話
-
具體更多詳細內容,可以參考官方文檔
-
首先看效果圖
-
整體項目結構圖
-
開始前需要講一些重要的點
-
1.是通過文件命名空間的路徑去找尋的,比如 Resource.cs 是在和多語言Resource.xxxx.resx文件同一級別的 2.參考下圖,不然多語言翻譯時是找尋不到的
-
-
-
ConfigureServices裡面進行以下配置
services.AddLocalization(); services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new List<CultureInfo> { new CultureInfo("en-US"),//英文 new CultureInfo("zh-Hans"),//簡體中文 new CultureInfo("zh-Hant")//繁體中文-臺灣 }; options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; options.RequestCultureProviders = new List<IRequestCultureProvider> { new CultureRequestCultureProvider() }; });
-
Configure下加入如下代碼
//多語言配置 var localizeOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>(); app.UseRequestLocalization(localizeOptions.Value);
-
其中關鍵的 CultureRequestCultureProvider.cs 代碼內容如下 (通過HttpContext 的Headers 傳參 Accept-Language來實現動態切換語言的)
public class CultureRequestCultureProvider : RequestCultureProvider { public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext) { if (httpContext == null) { throw new ArgumentNullException(); } #region 方式一從Cookies裡面按需獲取語言 註釋 //var CULTURE_String = "CULTURE"; //var CultureValue = httpContext.Request.Cookies[CULTURE_String]?.ToString() ?? ""; //if (string.IsNullOrWhiteSpace(CultureValue)) //{ // CultureValue = "zh-Hans"; // httpContext.Response.Cookies.Append(key: CULTURE_String, value: CultureValue, options: new CookieOptions() { Expires = DateTime.Now.AddYears(1) }); //} #endregion //方式二 從Headers裡面按需獲取語言 var culture = new StringSegment("zh-Hans"); var uiCulture = new StringSegment("zh-Hans"); var lang = httpContext.Request.Headers["Accept-Language"].ToString() ?? ""; switch (lang) { case "en-US": //英文 culture = new StringSegment("en-US"); uiCulture = new StringSegment("en-US"); break; case "zh-Hans": //簡體中文 culture = new StringSegment("zh-Hans"); uiCulture = new StringSegment("zh-Hans"); break; case "zh-Hant": //繁體中文-臺灣 culture = new StringSegment("zh-Hant"); uiCulture = new StringSegment("zh-Hant"); break; default: goto case "zh-Hans"; } return Task.FromResult(new ProviderCultureResult(culture, uiCulture)); } }
-
Resource.cs 以及多語言文件的代碼如下
namespace DynamicMultilanguage.Localize { public class Resource { } }
-
在控制器裡面使用時
private readonly IStringLocalizer<Resource> _localizer; public HomeController(IStringLocalizer<Resource> localizer) { _localizer = localizer; } [HttpGet] public object Get() { var culturesValue = _localizer["Home"]; var culturesValueParams = _localizer["HomeTitie", "雨太陽", "66666"]; return new { culturesValue, culturesValueParams }; }
按照以上操作,一個簡答的WebApi的多語言切換已經完成了