最近終於把多語言功能加上了,這次就再發一篇,講一下在asp.net core環境下如何實現多語言和本地化(Globalization and localization)功能,主要參看:ASP.NET Core 提供的服務和中間件可將網站本地化為不同的語言和文化,下面會除了介紹如何實現多語言切換還會重點講一下如何借助工具快速的維護多個語言的資源文件。
實現的效果
目前支援,后面會講如何快速添加和維護資源文件
- 中文
- 日文
- 德文
- 英文
- 俄文
Github
Demo:http://razor.i247365.net
源代碼:neozhu/RazorPageCleanArchitecture
后面我會整理一期完整介紹該框架的文章。
多語言實現的方法
在本項目中是通過 Microsoft.AspNetCore.Mvc.Localization.IViewLocalizer,Microsoft.Extensions.Localization.IStringLocalizer
配置開啟多語言服務
添加AddViewLocalization()
用於動態切換顯示語言用戶可以通過菜單選擇語言默認按系統語言
參考Real World Localization Implementation ASP.NET Core 5
CookieRequestCultureProvider 從cookie讀取設定的語言環境
public static class RequestLocalizationCookiesMiddlewareExtensions
{
public static IApplicationBuilder UseRequestLocalizationCookies(this IApplicationBuilder app)
{
app.UseMiddleware<RequestLocalizationCookiesMiddleware>();
return app;
}
}
public class RequestLocalizationCookiesMiddleware : IMiddleware
{
public CookieRequestCultureProvider Provider { get; }
public RequestLocalizationCookiesMiddleware(IOptions<RequestLocalizationOptions> requestLocalizationOptions)
{
Provider =
requestLocalizationOptions
.Value
.RequestCultureProviders
.Where(x => x is CookieRequestCultureProvider)
.Cast<CookieRequestCultureProvider>()
.FirstOrDefault();
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
if (Provider != null)
{
var feature = context.Features.Get<IRequestCultureFeature>();
if (feature != null)
{
// remember culture across request
context.Response
.Cookies
.Append(
Provider.CookieName,
CookieRequestCultureProvider.MakeCookieValue(feature.RequestCulture)
);
}
}
await next(context);
}
}
多語言資源文件位置
多語言資源文件的目錄結構要與項目的目錄結構一致
如何快速高效的維護資源文件
這里我給大家介紹一個插件ResXResourceManager
維護你的多國語言
也可以導出Excel/用戶工具翻譯后導入
最后
如果你有什么問題可以留言告訴我,同時歡迎你一起參與開發,這個項目還會持續更新下去
源代碼:RazorPageCleanArchitecture
Demo:http://razor.i247365.net