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;
}
}
}