当前位置: 首页 > 编程笔记 >

ASP.NET Core WebAPI实现本地化(单资源文件)

季小云
2023-03-14
本文向大家介绍ASP.NET Core WebAPI实现本地化(单资源文件),包括了ASP.NET Core WebAPI实现本地化(单资源文件)的使用技巧和注意事项,需要的朋友参考一下

在Startup ConfigureServices 注册本地化所需要的服务AddLocalization和 Configure<RequestLocalizationOptions>

 public void ConfigureServices(IServiceCollection services)
  {
   services.AddLocalization();
   services.Configure<RequestLocalizationOptions>(options =>
   {
    var supportedCultures = new List<CultureInfo>
    {
     new CultureInfo("en-us"),
     new CultureInfo("zh-cn")
    };

    options.DefaultRequestCulture = new RequestCulture(culture: "en-us", uiCulture: "en-us");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
    options.RequestCultureProviders = new IRequestCultureProvider[] { new RouteDataRequestCultureProvider { IndexOfCulture = 1, IndexofUiCulture = 1 } };
   });
   services.Configure<RouteOptions>(options =>
   {
    options.ConstraintMap.Add("culture", typeof(LanguageRouteConstraint));
   });
   services.AddControllers();
  }

在Startup.cs类的Configure 方法中添加请求本地化中间件。

 var localizeOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
   app.UseRequestLocalization(localizeOptions.Value);

RequestCultureProvider 它使用简单的委托来确定当前的本地化区域性,当然我们还可以通过RequestCultureProvider自定义源的请求区域信息比如说配置文件或者数据库都是可以的.或者说我们可以选用默认的一些方式让我们去获取到当前区域.

ASP.NET Core 本地化默认向我们提供了四个方式,可用于确定正在执行的请求的当前区域性:

  • QueryStringRequestCultureProvider
  • CookieRequestCultureProvider
  • AcceptLanguageHeaderRequestCultureProvider
  • CustomRequestCultureProvider

如下所示我将通过路由的方式,去确定当前区域

public class RouteDataRequestCultureProvider : RequestCultureProvider
 {
  public int IndexOfCulture;
  public int IndexofUiCulture;

  public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
  {
   if (httpContext == null)
    throw new ArgumentNullException(nameof(httpContext));
   string uiCulture;

   string culture = uiCulture = httpContext.Request.Path.Value.Split('/')[IndexOfCulture];

   var providerResultCulture = new ProviderCultureResult(culture, uiCulture);

   return Task.FromResult(providerResultCulture);
  }
 }

通过如下代码片段实现IRouteConstraint对路由做相应的约束

 public class LanguageRouteConstraint : IRouteConstraint
 {
  public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
  {

   if (!values.ContainsKey("culture"))
    return false;

   var culture = values["culture"].ToString();
   return culture == "en-us" || culture == "zh-cn";
  }
 }

添加区域资源文件

注入IStringLocalizer<T>,StringLocalizer将通过传递的共享资源(T)的值映射到资源文件,然后将本地化根据字符串的名称从资源文件返回响应的值

 [Route("{culture:culture}/[controller]")]
 [ApiController]
 public class HomeController : ControllerBase
 {
  private readonly IStringLocalizer<Resource> localizer;
  public HomeController(IStringLocalizer<Resource> localizer)
  {
   this.localizer = localizer;
  }
  public string Get()
  {
   return localizer["Home"];
  }
 }

如下图所示

Reference

https://github.com/hueifeng/BlogSample/tree/master/src/LocalizationSingleResx

到此这篇关于ASP.NET Core WebAPI实现本地化(单资源文件)的文章就介绍到这了,更多相关ASP.NET Core WebAPI本地化内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 前面小节我们介绍了如何设置Locale,设置好Locale之后我们需要解决的问题就是如何存储相应的Locale对应的信息呢?这里面的信息包括:文本信息、时间和日期、货币值、图片、包含文件以及视图等资源。那么接下来我们将对这些信息一一进行介绍,Go语言中我们把这些格式信息存储在JSON中,然后通过合适的方式展现出来。(接下来以中文和英文两种语言对比举例,存储格式文件en.json和zh-CN.jso

  • 问题内容: 在Java中,我可以为位于硬盘驱动器本地的文件创建URI吗?如果是这样,应该如何构造? 问题答案: 查看文件文档: File具有构造函数,该构造函数将URI作为参数,并且如果您想从现有文件中获取URI ,它也具有方法。您可以玩这个游戏,以了解应该如何做。 您还可以阅读有关URI(不是Java术语)的信息。维基百科中有一个示例: 文件:///home/username/RomeoAndJ

  • Creator 从 1.10 开始正式支持了文本文件。常见的文本格式,如 .txt、.plist、.xml、.json、.yaml、.ini、.csv、.md,都会导入为 cc.TextAsset。 你可以直接为组件关联一个 TextAsset: // 声明 file: { default: null, type: cc.TextAsset,

  • 问题内容: 我需要JRE使用仅英语版本的JRE资源的翻译版本。 根据ResourceBundle.java文档,这很容易:使用正确的语言环境后缀添加本地化的资源。例如,标准 XMLSchemaMessages.properties 将成为翻译版本: XMLSchemaMessages_FR.properties 等等。 编辑:此特定文件位于:com \ sun \ org \ apache \ x

  • 问题内容: 测试浏览器:Chrome版本:52.0.2743.116这是一个简单的JavaScript,可以从本地打开图像文件,例如“ C:\ 002.jpg” 请给我任何合适的建议。 问题答案: 知道这有点老了,但是看到很多这样的问题… 我们在课堂上经常使用Chrome,这是处理本地文件的必备条件。 我们一直在使用的是“ Chrome浏览器的Web服务器”。启动它,选择希望使用的文件夹,然后转到

  • 问题内容: 与UIWebView和WKWebView的早期版本(iOS 10和macOS 10.12)不同,本地文件的默认加载操作已从移至。同样,它也已成为在WKWebView中加载本地资源的默认功能。 我知道,并且是完全不同的,都已经在过去的工作- 在历史上是默认设置,选择的方法; 但是,似乎Swift的最新版本破坏了大多数(如果不是全部)解决方案。现在,解决方案似乎可以 使 目录层次结构 扁平