多語言,已成為必不可少的需求了,在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