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

.NET Core WebApi 多语言本地化,动态切换多语言
  1. 原生的.net core webapi 动态多语言本地话

    成都创新互联专注于冀州网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供冀州营销型网站建设,冀州网站制作、冀州网页设计、冀州网站官网定制、小程序设计服务,打造冀州网络公司原创品牌,更为您提供冀州网站排名全网营销落地服务。

    • 具体更多详细内容,可以参考官方文档

    • 首先看效果图

    • 整体项目结构图

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

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

  2. ConfigureServices里面进行以下配置

    services.AddLocalization();
                services.Configure(options =>
                {
                    var supportedCultures = new List
                    {
                        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 { new CultureRequestCultureProvider() };
                });
    
  3. Configure下加入如下代码

    //多语言配置
                var localizeOptions = app.ApplicationServices.GetService>();
                app.UseRequestLocalization(localizeOptions.Value);
    
  4. 其中关键的 CultureRequestCultureProvider.cs 代码内容如下 (通过HttpContext 的Headers 传参 Accept-Language来实现动态切换语言的)

     public class CultureRequestCultureProvider : RequestCultureProvider
        {
            public override Task 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));
            }
        }
    
  5. Resource.cs 以及多语言文件的代码如下

    namespace DynamicMultilanguage.Localize
    {
        public class Resource
        {
        }
    }
    

  6. 在控制器里面使用时

    		private readonly IStringLocalizer _localizer;
    
            public HomeController(IStringLocalizer localizer)
            {
                _localizer = localizer;
            }
    
    
    		[HttpGet]
            public object Get()
            {
                var culturesValue = _localizer["Home"];
                var culturesValueParams = _localizer["HomeTitie", "雨太阳", "66666"];
    
                return new { culturesValue, culturesValueParams };
            }
    

    按照以上操作,一个简答的WebApi的多语言切换已经完成了


网页标题:.NET Core WebApi 多语言本地化,动态切换多语言
标题路径:http://scyanting.com/article/dsoidog.html