.netcore多語言解決方案


這里本文使用Microsoft.AspNetCore.Localization來實現多語言的解決方案

默認是包含這個包的,所有不需要再額外安裝

首先需要注入我們需要的服務

1.在startup.cs中注入

public void ConfigureServices(IServiceCollection services) { //設置語言包文件夾名稱 services.AddLocalization(o => { o.ResourcesPath = "Language"; });

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }

這里的路徑是根據項目根目錄尋找的相對路徑,設置成最后語言文件保存的路徑即可

然后在Configure中添加我們需要的語言文件的文件名,后面會再次提及文件名,

然后可以指定默認使用的語言文件DefaultRequestCulture

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            IList<CultureInfo> supportedCultures = new List<CultureInfo>
            {
                new CultureInfo("zh-CN"),
                new CultureInfo("zh"),
                new CultureInfo("en-US")
            };
            app.UseRequestLocalization(new RequestLocalizationOptions
            {
                //這里指定默認語言包
                DefaultRequestCulture = new RequestCulture("zh-CN"),
                SupportedCultures = supportedCultures,
                SupportedUICultures = supportedCultures
            });

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
        }

至此我們完成了需要的配置,然后添加最重要的語言文件,

語言文件有兩種添加方式

1.根據使用的控制器名稱進行命名,如默認的ValuesController,則語言文件需要命名為Controllers.ValuesController.zh-CN.resx

2.可以在我們保存語言文件的路徑下創建一級Controllers目錄,然后語言文件在名稱上就可以去掉開頭的Controllers.

雖然這種方式也不太美觀,不過也算好了一步,其實也可以自己手寫注入,然后通過過濾器實現類似的效果

接下來在語言文件中添加我們需要的數據進行測試

在en-US中添加

在另外兩個文件中添加相同的名稱

接下來測試調用,這里我們有三種方法可以告知服務端需要使用哪一個語言文件

1.cookie

2.http報文

3.url參數

在控制器中注入語言文件

[Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        private readonly IStringLocalizer<ValuesController> _localizer;

        public ValuesController(IStringLocalizer<ValuesController> localizer)
        {
            _localizer = localizer;
        }

        // GET api/values
        [HttpGet]
        public string Get()
        {
            return _localizer["Error"].Value;
        }
    }

使用注入的對象就可以獲取我們需要的鍵

_localizer["Error"]
我們需要顯示的數據保存在Value屬性中

 訪問頁面顯示如下

這里是因為我們設置的默認語言,所以加載了中文文件

接下來通過url參數傳遞來訪問不同的語言,加上參數culture=en-US

這樣便會自動返回英文的結果

 需要注意的是參數傳遞可以用三種寫法,效果一致

?culture=zh-CN&ui-culture=zh-CN
 
?culture=zh-CN
 
?ui-culture=zh-CN

如果是使用cookie方式的話,使用cookie名稱.AspNetCore.Culture,值如下

c=zh-CN|uic=zh-CN
c=zh-CN
uic=zh-CN

如果是使用http請求的話,則和常見請求一樣添加Accept-Language請求頭即可

Accept-Language:zh-CN

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM