ASP.NET Core Web API中的本地化
0 条评论1、Program.cs分别添加
//多语言支持,资源文件夹Localize在web的根目录
builder.Services.AddLocalization(options => options.ResourcesPath = "Localize");
//从配置文件读取,多语言都有那些语言配置
var localize = AppConfigurtaionServices.Configuration["Localize"];
var supportedCultures = new[] { "zh-CN" };//默认先写了一个
if (!string.IsNullOrEmpty(localize))//如果有配置的话使用配置的语言
{
supportedCultures= localize.Split(',');
}
var localizationOptions =
new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
2、添加资源文件
网站根目录建立Localize文件夹:
①使用控制器资源结构
在Localize目录下面建立文件夹Controllers,再在Controllers建立文件,格式为: 【控制器名称.区域名称.resx】 例如testController.en-US.resx
②使用共享资源接口
直接在Localize目录下面建立文件SharedResource.zh-CN.resx;并且在web下面建立一个空的类(注意命名空间,错误的命名空间可能让你找不到资源文件)
namespace Web
{
public class SharedResource
{
}
}
3、在控制器里面使用
namespace Web.Controllers
{
/// <summary>
/// 多语言测试api
/// </summary>
[Route("api/[controller]/[action]")]
[ApiController]
public class testController : ControllerBase
{
private readonly IStringLocalizer<testController> _localizer;
private readonly IStringLocalizer<SharedResource> sharedResourceLocalizer;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="localizer"></param>
/// <param name="sharedResourceLocalizer"></param>
public testController(IStringLocalizer<testController> localizer,
IStringLocalizer<SharedResource> sharedResourceLocalizer)
{
this.sharedResourceLocalizer = sharedResourceLocalizer;
_localizer = localizer;
}
/// <summary>
/// 测试本地化
/// </summary>
/// <returns></returns>
[HttpGet]
public string Getttt()
{
var article = sharedResourceLocalizer["hello"];
var postName = sharedResourceLocalizer.GetString("hello").Value;
return _localizer["hello"].Value;//如果找不到succeed的本地化值,那么就返回字符串“succeed”
}
}