5.全球化本地化

全球化:为了应用程序支持不同文化而设计的

本地化:本地化是针对一个特定的文化/区域

Microsoft.AspNetCore.Mvc.Localizaion

Microsoft.Extensions.Localizaion

网站要走上世界,每个国家有自己的语言文化,比如币种、日期时间格式和数字表示

等。

  1. 让应用程序内容本地化
  2. 为不同的文化和语言提供本地化资源包
  3. 在每个请求中实现语言/文化切换策略

内容本地化 IstringLocalizer ,IHtmlLocalizer

{Microsoft.AspNetCore.Localization.QueryStringRequestCultureProvider}

{Microsoft.AspNetCore.Localization.CookieRequestCultureProvider}

{Microsoft.AspNetCore.Localization.AcceptLanguageHeaderRequestCultureProvider} 优先级最高

任何地方通过一下方法获取语言文化

System.Threading.Thread.CurrentThread.CurrentCulture 语言文化

System.Threading.Thread.CurrentThread.CurrentUICulture UI语言文化

CultureInfo】提供有关特定区域性(对于非托管代码开发,则称为“区域设置”)的信息。 这些信息包括区域性的名称、书写系统、使用的日历、字符串的排序顺序以及对日期和数字的格式化设置

通过MVCFilter来实现多语言

创建一个Filter

public class LocalizationPipeline

{

​ public void Configure(IApplicationBuilder applicationBuilder)

​ {

​ var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("zh-CN") };

​ var localizationOptions = new RequestLocalizationOptions

​ {

​ SupportedCultures = supportedCultures,

​ SupportedUICultures = supportedCultures,

​ DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("zh-CN") //默认使用

​ };

​ //清空请求头中的语言

​ localizationOptions.RequestCultureProviders.Clear();

​ //使用MVC路由 www.moneydream.club/zh-CN/Home/index

​ localizationOptions.RequestCultureProviders.Add(new RouteDataRequestCultureProvider());

​ applicationBuilder.UseRequestLocalization(localizationOptions);

​ }

}

配置MVC路由

app.UseEndpoints(endpoints =>

​ {

​ endpoints.MapControllerRoute(

​ name: "default",

​ pattern: "{culture=zh-CN}/{controller=Home}/{action=Index}/{id?}");

​ });

依赖注入

public void ConfigureServices(IServiceCollection services)

{

//services.AddLocalization(options=> options.ResourcesPath= "Resources"); //本地化

​ //使用PO 文件实现多语言

​ services.AddPortableObjectLocalization(options => options.ResourcesPath = "Localization");

​ //通过Filter 中间件来实现 多语言

​ services.AddControllersWithViews(options=>options.Filters.Add(new MiddlewareFilterAttribute(typeof( LocalizationPipeline))))

​ .AddViewLocalization();

}

结果呈显

https:mocalhost44359/en-US  C a localhost:44359/en-US/StringLocalizer/index  GitHub •  Hello World

https://localhost:44359/zh-CN X +  C localhost:44359/zh-CN/StringLocalizer/index  GitHub •

区域性回退行为

用户提供语言文化是:zh-CN 但我们系统没有提供zh-CN的语言文化 我们只有zh文化 回退的话就会使用这个文化

Po 文件

OrchardCore.Localization.Core.DLL 通过解读PO文件实现多语言

写Po文件

en-US.po  2  Startup.cs  X  Index.cshtml  HomeController.c'  k: this is DO file  msgid "this is file  msgstr "This is file samples

zh-CN.po  2  Startup.cs  X  Index.cshtml  HomeController.cs  k: this is DO file  msgid "this is file  msgstr

创建控制器 PoLocalizerController 并添加视图

安装Nuget包

Install-Package OrchardCore.Localization.Core -Version 1.0.0-rc2-13450

依赖注入

public void ConfigureServices (IServiceC011ection services)  services. AddLoca1ization options. ResourcesPath= "Resources  services. AddPortab1eObjectLoca1ization (opticns opticns. ResourcesPath  "Localization") ,  services. AddContr011ersWithViews (Ofté+>optionls. Filters. Add (new MiddlewareFilterAttribute (typeof  ( LocalizationPipe1ine))))  . AddViewLoca1 izat ion ()

需要注意 .AddViewLocalization 必须 因为使用的是 视图多语言

结果呈现

Index  localhost:44359/en-us/PoLocalizer/index  GitHub  This is po file samples

xapu!,/JaZ!leD010d/N3- 「 一Z澇SE荨•1S0q一巴0一 0

posted @ 2021-02-08 16:53  农村程序员  阅读(198)  评论(0)    收藏  举报