.NetCore MVC國球化多語言,實現中英文翻譯

.NetCore MVC全球化,實現中英文翻譯
參照:[@ASP.NET Core 全球化和本地化](https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-2.1)


**1、Startup.cs中註冊服務並制定Resources文件的位置**
        
            

```

```csharp
//    在Startup.cs的ConfigureServices方法下添加一下內容
services.AddLocalization(options => options.ResourcesPath = "Resources");//資源文件路徑
            services.AddMvc()
            .AddDataAnnotationsLocalization(options =>
            {
                options.DataAnnotationLocalizerProvider = (type, factory) =>
                    factory.Create(typeof(SharedResource));
            }).AddMvcLocalization()
            .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
            services.AddSingleton<IStringLocalizer>((sp) =>
            {
                var sharedLocalizer = sp.GetRequiredService<IStringLocalizer<SharedResource>>();
                return sharedLocalizer;
            });
```
//在Configure方法下加入以下


             var supportedCultures = new[] { "zh-Hans", "en-US" };
            app.UseRequestLocalization(cultureOptions =>
            {
                cultureOptions.AddSupportedCultures(supportedCultures)
                .AddSupportedUICultures(supportedCultures)
                .SetDefaultCulture(supportedCultures[0]);
                cultureOptions.FallBackToParentCultures = true;
            });
```


在程序中添加一個文件夾並命名Resources 並在Resources文件夾下新建一個冗餘的SharedResource.cs類,該類用於公共資源文件,不再使用各自的資源文件。
然後注意坑來了,坑來了,坑來了
錯誤示例:直接在Resources文件夾下新建資源文件並命名SharedResource.zh-Hans.resx和SharedResource.en-US.resx ,結果三個文件自動整合成一個文件夾了在這裏插入代碼片 如下圖:

調用:在_viewimports頁面添加

@using Microsoft.AspNetCore.Mvc.Localization
@inject Microsoft.Extensions.Localization.IStringLocalizer Localizer

在.cshtml調用:@Localizer["projectName"]/// projectName是資源文件中的名稱

結果運行後直接顯示出來的是projectName,而不是資源文件中的值

正確解決方法:

在Resources文件夾下新建資源文件並命名Resources.SharedResource.zh-Hans.resx和Resources.SharedResource.en-US.resx ,這時候這三個文件就在Resources文件夾下同一級了

調用:在_viewimports頁面添加

@using Microsoft.AspNetCore.Mvc.Localization
@inject Microsoft.Extensions.Localization.IStringLocalizer Localizer

在.cshtml調用:@Localizer["projectName"]/// projectName是資源文件中的名稱

在control調用

public class CommonController : Controller
    {
        private readonly IStringLocalizer<CommonController> _localizer;

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

        [HttpGet]
        public string Get()
        {
            return _localizer["CommonTitle"];
        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章