精华内容
下载资源
问答
  • ASP.NET Core中提供了一些本地化服务和中间件,可将网站本地化为不同的语言文化。ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实现本地化 在.NET Core 2.0以上版本, Microsoft.AspNetCore....

    ASP.NET Core中提供了一些本地化服务和中间件,可将网站本地化为不同的语言文化。
    ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实现本地化

    在.NET Core 2.0以上版本, Microsoft.AspNetCore.Localization已经包含在了Microsoft.AspNetCore.All中,所以我们并不需要手动引入其他的类库。

     

     

    创建一个MVC网站


     

    为了测试ASP.NET Core的本地化,我们首先在Visual Studio 2017中创建一个MVC项目LocalizationSample。

     

     

     

    配置Startup类


     

    ASP.NET Core中,如果希望启动本地化,首先需要在Startup类的ConfigureServices方法中使用services.AddLocalization添加本地化服务。

    public void ConfigureServices(IServiceCollection services)
    {
    services.AddLocalization(o =>
    {
    o.ResourcesPath = "Resources";
    });
     
    services.AddMvc();
    }

     

    在这个方法中,我们指定了文件夹Resources作为存放翻译文件的目录。
    注:如果不指定存放翻译文件的目录, ASP.NET Core会默认从网站根目录下读取。
    然后我们需要在Configure方法中添加本地化中间件。

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    app.UseStaticFiles();
     
    IList<CultureInfo> supportedCultures = new List<CultureInfo>
    {
    new CultureInfo("en-US"),
    new CultureInfo("zh-CN"),
    };
    app.UseRequestLocalization(new RequestLocalizationOptions
    {
    DefaultRequestCulture = new RequestCulture("en-US"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
    });
     
    app.UseMvc(routes =>
    {
    routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");
    });
    }
    • app.UseRequestLocalization必须放置app.UseMvc之前
    • DefaultRequestCulture参数指定了默认的语言文化,即用户不指定任何文化时的默认语言文化
    • SupportedCultures和SupportedUICultures是指定当前应用支持的所有语言文化

    注: SupportedCultures指定的是数字和日期格式, SupportedUICultures指定的翻译文件

     

     

     

    添加资源文件


     

    下面我们尝试添加一个资源文件

    1. 首先我们创建一个Resources文件夹,这就是我们在前面Startup类中配置的目录名。
    2. 然后我们在Resource文件夹中添加一个资源文件,并命名为Controllers.HomeController.zh-CN.resx。
    3. 在这个资源文件中,添加一个字段Hello, 并设置其值为"你好"。

     

     

    在Controller中获取本地化字符串


     

    现在我们打开默认生成的HomeController, 清空里面所有的action, 并添加一个新的action, 代码如下:

    public class HomeController : Controller
    {
    public HomeController()
    {
     
    }
     
    public IActionResult Hello()
    {
    return Content("Hello");
    }
    }

     

    启动项目之后访问/Home/Hello, 结果如下

     

    下面我们修改HomeController的代码, 来引入本地化字符串访问器

    public class HomeController : Controller
    {
    private readonly IStringLocalizer<HomeController> _localizer;
     
    public HomeController(IStringLocalizer<HomeController> localizer)
    {
    _localizer = localizer;
    }
     
    public IActionResult Hello()
    {
    return Content(_localizer["Hello"]);
    }
    }

     

     

    代码解释


     

    • IStringLocalizer是一个本地化字符串访问器的泛型接口,这里我们通过依赖注入的方式在HomeController的构造函数中将其注入
    • 我们可以通过IStringLocalizer的属性访问器获取到对应字段在不同语言下的文本。

     

     

     

     

    最终效果


     

    现在我们启动程序, 重新访问/Home/Hello, 结果如下

    你会发现结果没有变化,这是因为默认我们设置的语言文化是en-US, 但是我们之前没有添加en-US的资源文件,所以程序就直接将访问的字段名输出了。
    现在我们修改URL, 访问/Home/Hello?ui-culture=zh-CN, 结果如下

    我们期望的"你好"被正确输出了,这说明ASP.NET Core默认支持在Url中以culture参数的形式设置当前网站使用的语言

     

     

     

     

    资源文件命名


     

    为什么我们之前添加了一个名为Controllers.HomeController.zh-CN.resx的资源文件,本地化字符串访问器IStringLocalizer就能定位到这个文件并读取其中的字段属性呢?
    这是由ASP.NET Core资源文件的命名约定决定的。
    ASP.NET Core资源文件的名称由2部分组成:

    • 去掉程序集名称的完整类名
    • 语言文化名称

    以前面的例子为例:
    我们创建了一个本地化字符串访问器接口,它的泛型类型是HomeController, 其完整类名是LocalizationSample.Controllers.HomeController, 当前程序集的名称是LocalizationSample, 所以去掉程序集名称之后,剩余部分是Controllers.HomeController。当我们设置culture参数是zh-CN时, ASP.NET Core查找的资源文件名是Controllers.HomeController.zh-CN.resx, 这正是我们前面添加的中文语言文化资源文件名。
    如果你不喜欢这种方式,ASP.NET Core还提供了另外一种资源文件的组织方式
    你可以Resources目录下创建以下目录结构

    • Resources
      • Controllers
        • HomeController.zh-CN.resx

    本地化字符串访问器也能自动定位到这个文件。

     

     

    默认的语言文化提供器


     

    ASP.NET Core的本地化中间件默认支持3种语言文化提供器

    • URL中的查询字符串
    • Cookie
    • 请求头

     

     

    URL中的查询字符串


     

    ASP.NET Core会从URL中的culture参数中获取当前应用使用的语言文化,这就是前面例子中,"你好"能正确输出的原因
    除了指定ui-culture参数,你还可以使用culture参数指定当前格式化时间,数字等所使用的语言文化。

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

     

    Tips: 当只指定culture或ui-culture参数时,ASP.NET Core会自动将culture和ui-culture设置成一样的。即?culture=zh-CN等同于?culture=zh-CN&ui-culture=zh-CN 

     

     

    Cookie


     

    ASP.NET Core中还支持使用Cookie的方式设置当前应用使用的语言文化。默认使用的Cookie名称是.AspNetCore.Culture。
    .AspNetCore.Culture的值格式如下

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

    其中c表示culture, uic表示ui-culture。
    下面我们使用Chrome的开发者工具, 为当前网页添加语言文化Cookie

    然后我们访问/Home/Hello, "你好"也被正确的输出了

    这说明ASP.NET Core从Cookie中读取到了语言文化配置

     

     

    请求头


     

    除了URL查询字符串和Cookie, ASP.NET Core还支持在请求头中指定语言文化。请求头中语言文化字段名称是 Accept-Language。
    Accept-Language的文档,参见https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Language
    这里我们使用Postman来测试一下,我们设置Accept-Language为zh-CN, zh;q=0.9, 结果如下

     

     

     

     

    如何在View中使用本地化


     

    除了Controller, 我们更多的是在View中使用本地化。
    如果希望在View中使用本地化,首先需要在Startup类的ConfigureServices方法中启用View本地化

    public void ConfigureServices(IServiceCollection services) 
    { 
    services.AddMvc() 
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix); 
    } 

    这里LanguageViewLocationExpanderFormat支持2种方式,这个和前面Controller的本地化文件名称约定类似

    • Suffix, 例/Resources/Home/Hello.zh-CN.resx
    • Path, 例/Resources/Home/zh-CN/Hello.resx

    下面我们修改HomeController的代码,Hello方法将返回一个View
    HomeController 。

    public IActionResult Hello() 
    { 
    //return Content(_localizer["Hello"]);
    return View(); 
    } 

    Hello.cshtml

    @{ 
    ViewData["Title"] = "Hello"; 
    } 
     
    <h2>Good Bye</h2> 

    然后我们创建如下图的目录结构, 并创建资源文件Hello.zh-CN.resx, 并添加GoodBye字段,其值为"再见"

     

     

    使用ViewLocalizer


     

    ViewLocalizer类可以帮助我们在Razor视图中使用本地化文本。现在我们来修改Hello.cshtml, 在文件添加本地化引用,并注入一个ViewLocalizer对象

    @using Microsoft.AspNetCore.Mvc.Localization 
     
    @inject IViewLocalizer Localizer 
    @{ 
    ViewData["Title"] = "Hello"; 
    } 
     
    <h2>@Localizer["GoodBye"]</h2>

    这里我们使用ViewLocalizer读取了本地化文本,它的用法和IStringLocalizer一样,都是通过属性访问器访问对应字段的本地化文本。

     

     

     

    最终效果


     

    现在我们运行程序并访问/Home/Hello, 结果如下

    然后我们继续访问/Home/Hello?ui-culture=zh-CN, 结果如下

    本地化字符串读取成功

     

    原文链接

     

    转载于:https://www.cnblogs.com/OpenCoder/p/10076207.html

    展开全文
  • 这里本文使用Microsoft.AspNetCore.Localization来实现多语言的解决方案 默认是包含这个包的,所有不需要再额外安装 首先需要注入我们需要的服务 1.在startup.cs中注入 public void ConfigureServices...

    引用自:https://www.cnblogs.com/ives/p/language.html

    这里本文使用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

     

    展开全文
  • 多语言,已成为必不可少的需求了,在Asp.net Core中解决起来很方便。实现一个多语言的网站只要几分钟。 1.环境:VS2019+Asp.net Core 5(适用于3.1,其实就是追个新) 2.新建项目 因为是一个空项目,所以为了...

    多语言,已成为必不可少的需求了,在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.其它配置

    浏览器选择 cookie操作:c=zh-CN|uic=en-US(其中 c 是 Cultureuic 是 UICulture)

    可以灵活控制当前显示

    //

    参考资料:

    https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/localization?view=aspnetcore-5.0#additional-resources

    展开全文
  • 参考作者 dotNET跨平台 的博客 &... 体验 ASP.NET Core 中的多语言支持(Localization) 但是一直显示英语吗??? #### 继续参考 StackOverflow 的 ASP .NET Core default language is always English  ...

    参考作者 dotNET跨平台 的博客 >> 体验 ASP.NET Core 中的多语言支持(Localization)

    但是一直显示英语吗??? ####

    继续参考 StackOverflow 的 ASP .NET Core default language is always English

     

    展开全文
  • 其实在.NET Core有更好的多语言实现方式 #新建项目(.NET Core MVC) #在项目根目录新建Resources, 在Resources目录里面添加Program.en-US.resx ||Program.zh-Hans.resx ||Program.xx-XX.resx等等你要使用的资源文件...
  • .NET Core多语言

    2018-10-30 01:25:00
    ASP.NET Core中提供了一些本地化服务和中间件,可将网站本地化为不同的语言文化。 ASP.NET Core中我们可以使用Microsoft.AspNetCore.Localization库来实现本地化。 在.NET Core 2.0以上版本,Microsoft.AspNetCore....
  • 本篇文章主要介绍了ASP.NET Core 中的多语言支持(Localization) ,具有一定的参考价值,有兴趣的可以了解一下
  • app.Map("/index", MapTest);//MapTest为函数 app.Map("/login", a => a.Run(async context =>... await context.Response.... //多语言 //把ajax统一处理 }, MapTest);//MapTest为函数
  • 这是一个ASP.NET Core Web多语言项目,主要展示项目的不同: > 2. 第一种:www.xxx.com/en/index; www.xxx.com/zh/index; ,这种事通过路由来处理的 > 3. 第二种: www.xxx.com/index/en; ...
  • 本篇文章主要介绍了Asp.Net Core MVC项目实现多语言实例(Globalization/Localization) ,具有一定的参考价值,有兴趣的可以了解一下
  • asp.net core 实现支持多语言Intro最近有一个外国友人通过邮件联系我,想用我的活动室预约,但是还没支持多语言,基本上都是写死的中文,所以最近想支持一下更多语言,于是有了多语...
  • 这是一个新的系列,名字是《ASP.NET Core 入门到实战》。这个系列主讲ASP.NET Core MVC,辅助一些前端的基础知识(能用来实现我们需要的即可,并非主讲)。同时这个系列也会在后续介绍ASP.NET Core 平台的其它类型的...
  • 先说说 asp.net core 默认的多语言和国际化。官方文档 一:基本使用方法 先要安装 包Microsoft.AspNetCore.Mvc.Localization (依赖 Microsoft.Extensions.Localization) 然后使用 资源文件保存不同的语言对应的...
  • Asp.net实现多语言Demo

    2010-08-13 20:28:13
    ne,t多语言,源码ne,t多语言,源码ne,t多语言,源码ne,t多语言,源码
  • 什么是ASP.NET Core 2.0   为什么要使用 ASP.NET Core? NET Core 刚发布的时候根据介绍就有点心里痒痒, 大概看了一下没敢付诸于行动, 现在2.0发布了一段时间了, 之前对其"不稳定"的顾虑也打消的...
  • 今天,Scott Hanselman在其博客上宣布《ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0》,ASP.NE
  • ASP.NET Core 是一个跨平台的,高性能,开源框架,用于生成基于云且连接 Internet 的新式应用程序。我们可以使用 ASP.NET Core: 生成 Web 应用和服务、IoT应用和移动后端。 在 Windows、macOS 和 Linux 上使用...
  • ASP.NET Core 能用于什么样的应用  ASP.NET Core可以用作传统的web服务、RESTful服务、远程过程调用(RPC)服务、微服务,这归功于它的跨平台支持和轻量级设计。如下图所示: 什么时候选择ASP.NET Core  这...
  • ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx 原文:ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + MySQL + Nginx一、前言  在之前的文章(ASP.NET Core ...
  • ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1 原文:ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1一、前言  最近一两个星期,加班,然后回去后弄自己的博客,把...
  • ASP.NET Core项目开发实战入门》从基础到实际项目开发部署带你走进ASP.NET Core开发。ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...
  • ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 ...
  • 最新版本的 ASP.NET 叫做 ASP.NET Core (也被称为 ASP.NET 5) 它颠覆了过去的 ASP.NET。 什么是 ASP.NET Core? ASP.NET Core 1.0 是一个开源跨平台的开发框架,用于构建基于云的现代 Web 应用 。它是从底层开始...
  • ASP.NET Core搭建多层网站架构【13-扩展之支持全球化和本地化多语言】 2020/02/03, ASP.NET Core 3.1, VS2019, ResXManager 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构【13-扩展之支持全球化和本地...
  • ASP.NET Core 实战:使用 Docker 容器化部署 ASP.NET Core + sqlserver + Nginx¶ 一、前言¶ 在之前的文章(ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路)中,我介绍了如何在 Linux 环境中安装 .NET Co...
  • ASP.NET Core: 全新的ASP.NET

    千次阅读 2018-06-15 05:40:29
    背景最新版本的 ASP.NET 叫做 ASP.NET Core (也被称为 ASP.NET 5) 它颠覆了过去的 ASP.NET。什么是 ASP.NET Core?ASP.NET Core 1.0 是一个开源跨平台的开发框架,用于构建基于云的现代 Web 应用 。它是从底层开始...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,266
精华内容 4,506
热门标签
关键字:

asp.netcore多语言