多語言,已成為必不可少的需求了,在Asp.net Core中解決起來很方便。實現一個多語言的網站只要幾分鍾。
1.環境:VS2019+Asp.net Core 5(適用於3.1,其實就是追個新)
2.新建項目
因為是一個空項目,所以為了多點內容,就加入了一些基架內容,添加了Identity的自動生成內容
如何生成:https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-5.0&tabs=visual-studio
看這里吧。不多說了。就是添加一些登陸頁面之類的
正好它是英文滴
2.現在我們來添加多語言
打開配置文件appsettings.json,在配置文件中添加如下內容,其實這是把語言寫在了配置中,這樣方便以后操作,可以自己后台操作,也可以用代碼操作。
"Localization": { "CultureInfo": "en-US,zh-CN", "Default": "en-US"
3.打開startup.cs文件
在ConfigureServices中添加如下配置
services.AddLocalization(options => options.ResourcesPath = "Resources"); services.AddMvc() .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) .AddDataAnnotationsLocalization();
在中間件注冊中,添加如下代碼(注意:這個應該在app.UseStaticFiles之前注冊,不然會沒反應),這里正好讀的是配置文件里的支持的語言和默認語言,查了一下資料,這里的默認語言的意思是
當沒有本地文件時,會以什么語言顯示。也就是如果有本地語言,會加載支持的語言
//Localization var supportedCultures = Configuration["Localization:CultureInfo"].Split(","); var localizationOptions = new RequestLocalizationOptions().SetDefaultCulture(Configuration["Localization:Default"]) .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); app.UseRequestLocalization(localizationOptions);
4.前端操作,打開_ViewImports.cshtml,添加對本地化的引用,共兩行
@using AquaWebCore @using AquaWebCore.Models @using Microsoft.AspNetCore.Mvc.Localization @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @inject IViewLocalizer Localizer
下面我們來修改一下前端頁面,Views目錄中的任意文件,就先拿Home開刀吧
@{ ViewData["Title"] = @Localizer["Home Page"]; } <div class="text-center"> <h1 class="display-4">@Localizer["Welcome"]</h1> <p>@Localizer["Learn aboutLearn about"]<a href="https://docs.microsoft.com/aspnet/core">@Localizer["building Web apps with ASP.NET Core"]</a>.</p> </div>
其實就是在每一個文本前加上@Localizer
5 .添加資源文件
在Resources目錄下建立一個和程序目錄相同的資源文件,在這個文件命名上有講究,Resources\Views\Home\Index.zh-CN.resx,就是文件名.地區名.resx
6.編輯資源文件
7.運行一下,多語言 就顯示了
8.其它配置
瀏覽器選擇:http://localhost:5000/?culture=zh-CN
js cookie操作:c=zh-CN|uic=en-US(其中 c
是 Culture
,uic
是 UICulture
)
可以靈活控制當前顯示
//////////////////////////////////////////////////
參考資料:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-5.0#additional-resources