Blame view

netcore/src/Infrastructure/NCC/Localization/L.cs 2.63 KB
de2bd2f9   “wangming”   项目初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  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
  {
      /// <summary>
      /// 全局多语言静态类
      /// </summary>
      [SuppressSniffer]
      public static class L
      {
          /// <summary>
          /// String 多语言
          /// </summary>
          public static IStringLocalizer @Text => App.GetService<IStringLocalizerFactory>(App.RootServices)?.Create();
  
          /// <summary>
          /// Html 多语言
          /// </summary>
          public static IHtmlLocalizer @Html => App.GetService<IHtmlLocalizerFactory>(App.RootServices)?.Create();
  
          /// <summary>
          /// 设置多语言区域
          /// </summary>
          /// <param name="culture"></param>
          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) }
              );
          }
  
          /// <summary>
          /// 获取当前选择的语言
          /// </summary>
          /// <returns></returns>
          public static RequestCulture GetSelectCulture()
          {
              var httpContext = App.HttpContext;
              if (httpContext == null) return default;
  
              // 获取请求特性
              var requestCulture = httpContext.Features.Get<IRequestCultureFeature>();
              return requestCulture.RequestCulture;
          }
  
          /// <summary>
          /// 获取系统提供的语言列表
          /// </summary>
          /// <returns></returns>
          public static Dictionary<string, string> GetCultures()
          {
              var httpContext = App.HttpContext;
              if (httpContext == null) return new Dictionary<string, string>();
  
              // 获取请求本地特性选项
              var locOptions = httpContext.RequestServices.GetService<IOptions<RequestLocalizationOptions>>().Value;
  
              // 获取语言符号和名称
              var cultureItems = locOptions.SupportedUICultures
                  .ToDictionary(u => u.Name, u => u.DisplayName);
  
              return cultureItems;
          }
      }
  }