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

.netcore多语言解决方案的更多相关文章

  1. WPF应用程序支持多国语言解决方案

    原文:WPF应用程序支持多国语言解决方案 促使程序赢得更多客户的最好.最经济的方法是使之支持多国语言,而不是将潜在的客户群限制为全球近70亿人口中的一小部分.本文介绍四种实现WPF应用程序支持多国语言 ...

  2. [转]Asp.Net 网站多语言解决方案

    本文转自:https://www.cnblogs.com/FredTang/archive/2013/01/23/2873231.html 最近领导要求实现PMSWeb应用程序的多区域语言的支持,所以 ...

  3. vivo全球商城全球化演进之路——多语言解决方案

    一.背景 随着经济全球化的深入,许多中国品牌纷纷开始在海外市场开疆扩土.实现全球化意味着你的产品或者应用需要能够在全球各地的语言环境使用,我们在进行海外业务的推进时,需要面对的最大挑战就是多语言问题. ...

  4. c#开发之多国语言解决方案gnu.gettext + poedit

    1.工具简介 1.1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称. i10n为资源本地化,全称为Locali ...

  5. 多国语言解决方案gnu.gettext + poedit

    1.工具简介 1.1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称. i10n为资源本地化,全称为Locali ...

  6. .Net MVC5(.Net Framework 4.0+)多语言解决方案

    最近项目需要做多语言,原先是2种语言(中文/英文),现在又要加一种语言,成了3种.那么原来的方式肯定不适用了,只能升级解决方案. 原来的写法,使用三目表达式,按照当前全局变量的语言类型,返回不同的语言 ...

  7. WPF 多语言解决方案 - Multilingual App Toolkit

    1.首先安装Multilingual App Toolkit   2.新建项目,在VS中点击"工具" -> "Multilingual App Toolkit&qu ...

  8. symfon2 配置文件使用 + HttpRequest使用 + Global多语言解决方案

    1. 在 app/conig中建立一个自命名的文件: abc.yml 2. 在 app/config/config.yml中导入abc.yml 文件头部: imports:- { resource: ...

  9. ASP.NET MVC 多语言解决方案

    1:打开VS,新建ASP.NET MVC4项目 2:创建一个放本地化资源的文件夹并命名为"Language",右键选择添加新项,选择资源文件并命名为"Com" ...

随机推荐

  1. 【atcoder】GP 2 [agc036C]

    题目传送门:https://atcoder.jp/contests/agc036/tasks/agc036_c 题目大意:给你一个长度为$N$初始全0的序列,每次操作你可以找两个不同的元素,一个自增1 ...

  2. const成员函数和const对象

    从成员函数说起 在说const成员函数之前,先说一下普通成员函数,其实每个成员函数都有一个隐形的入参:T *const this. int getValue(T *const this) { retu ...

  3. 对于写Python学习笔记的看法

    学习写笔记是一个不错的学习方法,好些同学在学习Python过程中也会写学习笔记.俗话说好记性不如烂笔头,我很赞同这个说法. 我列举几个学习Python写笔记的好处: 1.Python知识的二度巩固 通 ...

  4. Istio技术与实践04:最佳实践之教你写一个完整的Mixer Adapter

    Istio内置的部分适配器以及相应功能举例如下: circonus:微服务监控分析平台. cloudwatch:针对AWS云资源监控的工具. fluentd:开源的日志采集工具. prometheus ...

  5. Python 爬虫实现天气查询(可视化界面版)

    github项目地址:StarMan Python 实现天气查询的程序早已完成,近日开学无课,昨晚心血来潮想做一个较为友好的界面版本,便匆忙行动了起来. 在之前已有的程序的基础上使用Tkinter 模 ...

  6. 从后台数据库查询的List数据怎么在前台combobox显示

    后台直接从数据库,通过jdbcTemplate查询数据,得到List数据集,里面是Map List<Map<String, Object>> list =  jdbcTempl ...

  7. onpageshow、onpagehide、onload、onunload

    onpageshow :在用户浏览网页时触发, 在页面从浏览器缓存中读取时也触发 通过event.persisted 来判断, 如果页面从浏览器的缓存中读取该属性返回 ture,否则返回 false ...

  8. np中的随机函数

      numpy.random.uniform介绍: 1. 函数原型:  numpy.random.uniform(low,high,size)  ==>也即其他函数是对该函数的进一步封装 功能: ...

  9. spark-聚合算子aggregatebykey

    spark-聚合算子aggregatebykey Aggregate the values of each key, using given combine functions and a neutr ...

  10. e.target.value和this的区别

    1.e.target.value获取的就是你选择接受事件的元素输入的或者选择的值. 参数e接收事件对象. 而事件对象也有很多属性和方法,其中target属性是获取触发事件对象的目标,也就是绑定事件的元 ...