.NET Core WebApi 多语言本地化,动态切换多语言

打印 上一主题 下一主题

主题 873|帖子 873|积分 2629

.NET Core WebApi 多语言本地化,动态切换多语言


  • 原生的.net core webapi 动态多语言本地话

    • 具体更多详细内容,可以参考官方文档
    • 首先看效果图



    • 整体项目结构图



    • 开始前需要讲一些重要的点

        1. 1.是通过文件命名空间的路径去找寻的,比如 Resource.cs 是在和多语言Resource.xxxx.resx文件同一级别的
        2. 2.参考下图,不然多语言翻译时是找寻不到的
        复制代码




  • ConfigureServices里面进行以下配置
    1. services.AddLocalization();
    2.             services.Configure<RequestLocalizationOptions>(options =>
    3.             {
    4.                 var supportedCultures = new List<CultureInfo>
    5.                 {
    6.                     new CultureInfo("en-US"),//英文
    7.                     new CultureInfo("zh-Hans"),//简体中文
    8.                     new CultureInfo("zh-Hant")//繁体中文-台湾
    9.                 };
    10.                
    11.                 options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
    12.                 options.SupportedCultures = supportedCultures;
    13.                 options.SupportedUICultures = supportedCultures;
    14.                 options.RequestCultureProviders = new List<IRequestCultureProvider> { new CultureRequestCultureProvider() };
    15.             });
    复制代码
  • Configure下加入如下代码
    1. //多语言配置
    2.             var localizeOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
    3.             app.UseRequestLocalization(localizeOptions.Value);
    复制代码
  • 其中关键的 CultureRequestCultureProvider.cs 代码内容如下 (通过HttpContext 的Headers 传参 Accept-Language来实现动态切换语言的)
    1. public class CultureRequestCultureProvider : RequestCultureProvider
    2.     {
    3.         public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
    4.         {
    5.             if (httpContext == null)
    6.             {
    7.                 throw new ArgumentNullException();
    8.             }
    9.             #region 方式一从Cookies里面按需获取语言 注释
    10.             //var CULTURE_String = "CULTURE";
    11.             //var CultureValue = httpContext.Request.Cookies[CULTURE_String]?.ToString() ?? "";
    12.             //if (string.IsNullOrWhiteSpace(CultureValue))
    13.             //{
    14.             //    CultureValue = "zh-Hans";
    15.             //    httpContext.Response.Cookies.Append(key: CULTURE_String, value: CultureValue, options: new CookieOptions() { Expires = DateTime.Now.AddYears(1) });
    16.             //}
    17.             #endregion
    18.             //方式二 从Headers里面按需获取语言
    19.             var culture = new StringSegment("zh-Hans");
    20.             var uiCulture = new StringSegment("zh-Hans");
    21.             var lang = httpContext.Request.Headers["Accept-Language"].ToString() ?? "";
    22.             switch (lang)
    23.             {
    24.                 case "en-US":
    25.                     //英文
    26.                     culture = new StringSegment("en-US");
    27.                     uiCulture = new StringSegment("en-US");
    28.                     break;
    29.                 case "zh-Hans":
    30.                     //简体中文
    31.                     culture = new StringSegment("zh-Hans");
    32.                     uiCulture = new StringSegment("zh-Hans");
    33.                     break;
    34.                 case "zh-Hant":
    35.                     //繁体中文-台湾
    36.                     culture = new StringSegment("zh-Hant");
    37.                     uiCulture = new StringSegment("zh-Hant");
    38.                     break;
    39.                 default:
    40.                     goto case "zh-Hans";
    41.             }
    42.             return Task.FromResult(new ProviderCultureResult(culture, uiCulture));
    43.         }
    44.     }
    复制代码
  • Resource.cs 以及多语言文件的代码如下
    1. namespace DynamicMultilanguage.Localize
    2. {
    3.     public class Resource
    4.     {
    5.     }
    6. }
    复制代码



  • 在控制器里面使用时
    1.                 private readonly IStringLocalizer<Resource> _localizer;
    2.         public HomeController(IStringLocalizer<Resource> localizer)
    3.         {
    4.             _localizer = localizer;
    5.         }
    6.                 [HttpGet]
    7.         public object Get()
    8.         {
    9.             var culturesValue = _localizer["Home"];
    10.             var culturesValueParams = _localizer["HomeTitie", "雨太阳", "66666"];
    11.             return new { culturesValue, culturesValueParams };
    12.         }
    复制代码
    按照以上操作,一个简答的WebApi的多语言切换已经完成了

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表