.NET Core WebApi 多语言本地化,动态切换多语言
.NET Core WebApi 多语言本地化,动态切换多语言[*]原生的.net core webapi 动态多语言本地话
[*]具体更多详细内容,可以参考官方文档
[*]首先看效果图
[*]http://dis.qidao123.com/http:qiniu.binxixi.com/cultures1.gif
[*]整体项目结构图
[*]http://dis.qidao123.com/http:qiniu.binxixi.com/image-20221028120743455.png
[*]开始前需要讲一些重要的点
[*]1.是通过文件命名空间的路径去找寻的,比如 Resource.cs 是在和多语言Resource.xxxx.resx文件同一级别的
2.参考下图,不然多语言翻译时是找寻不到的
[*]http://dis.qidao123.com/http:qiniu.binxixi.com/image-20221028141023977.png
[*]ConfigureServices里面进行以下配置
services.AddLocalization();
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new List<CultureInfo>
{
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<IRequestCultureProvider> { new CultureRequestCultureProvider() };
});
[*]Configure下加入如下代码
//多语言配置
var localizeOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(localizeOptions.Value);
[*]其中关键的 CultureRequestCultureProvider.cs 代码内容如下 (通过HttpContext 的Headers 传参 Accept-Language来实现动态切换语言的)
public class CultureRequestCultureProvider : RequestCultureProvider
{
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException();
}
#region 方式一从Cookies里面按需获取语言 注释
//var CULTURE_String = "CULTURE";
//var CultureValue = httpContext.Request.Cookies?.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));
}
}
[*]Resource.cs 以及多语言文件的代码如下
namespace DynamicMultilanguage.Localize
{
public class Resource
{
}
}http://dis.qidao123.com/http:qiniu.binxixi.com/image-20221028121109966.png
http://dis.qidao123.com/http:qiniu.binxixi.com/image-20221028121117622.png
http://dis.qidao123.com/http:qiniu.binxixi.com/image-20221028121132130.png
[*]在控制器里面使用时
private readonly IStringLocalizer<Resource> _localizer;
public HomeController(IStringLocalizer<Resource> localizer)
{
_localizer = localizer;
}
public object Get()
{
var culturesValue = _localizer["Home"];
var culturesValueParams = _localizer["HomeTitie", "雨太阳", "66666"];
return new { culturesValue, culturesValueParams };
}按照以上操作,一个简答的WebApi的多语言切换已经完成了
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]