using NCC.Dependency; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Mvc.Localization; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace NCC.Localization { /// /// 全局多语言静态类 /// [SuppressSniffer] public static class L { /// /// String 多语言 /// public static IStringLocalizer @Text => App.GetService(App.RootServices)?.Create(); /// /// Html 多语言 /// public static IHtmlLocalizer @Html => App.GetService(App.RootServices)?.Create(); /// /// 设置多语言区域 /// /// public static void SetCulture(string culture) { var httpContext = App.HttpContext; if (httpContext == null) return; httpContext.Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)), new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) } ); } /// /// 获取当前选择的语言 /// /// public static RequestCulture GetSelectCulture() { var httpContext = App.HttpContext; if (httpContext == null) return default; // 获取请求特性 var requestCulture = httpContext.Features.Get(); return requestCulture.RequestCulture; } /// /// 获取系统提供的语言列表 /// /// public static Dictionary GetCultures() { var httpContext = App.HttpContext; if (httpContext == null) return new Dictionary(); // 获取请求本地特性选项 var locOptions = httpContext.RequestServices.GetService>().Value; // 获取语言符号和名称 var cultureItems = locOptions.SupportedUICultures .ToDictionary(u => u.Name, u => u.DisplayName); return cultureItems; } } }