前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Clean Architecture For RazorPage 实现多语言和本地化

Clean Architecture For RazorPage 实现多语言和本地化

作者头像
阿新
发布2021-09-08 15:29:46
7290
发布2021-09-08 15:29:46
举报
文章被收录于专栏:c#开发者c#开发者

最近终于把多语言功能加上了,这次就再发一篇,讲一下在asp.net core环境下如何实现多语言和本地化(Globalization and localization)功能,主要参看:ASP.NET Core 提供的服务和中间件可将网站本地化为不同的语言和文化,下面会除了介绍如何实现多语言切换还会重点讲一下如何借助工具快速的维护多个语言的资源文件。

实现的效果

目前支援,后面会讲如何快速添加和维护资源文件

  • 中文
  • 日文
  • 德文
  • 英文
  • 俄文

Github

Demo:http://razor.i247365.net 源代码:neozhu/RazorPageCleanArchitecture

后面我会整理一期完整介绍该框架的文章。

多语言实现的方法

在本项目中是通过 Microsoft.AspNetCore.Mvc.Localization.IViewLocalizer,Microsoft.Extensions.Localization.IStringLocalizer 这两个重要的组件实现的多语言显示的。

配置开启多语言服务

添加AddViewLocalization()

用于动态切换显示语言用户可以通过菜单选择语言默认按系统语言

参考Real World Localization Implementation ASP.NET Core 5

CookieRequestCultureProvider 从cookie读取设定的语言环境

代码语言:javascript
复制
public static class RequestLocalizationCookiesMiddlewareExtensions
    {
        public static IApplicationBuilder UseRequestLocalizationCookies(this IApplicationBuilder app)
        {
            app.UseMiddleware<RequestLocalizationCookiesMiddleware>();
            return app;
        }
    }

    public class RequestLocalizationCookiesMiddleware : IMiddleware
    {
        public CookieRequestCultureProvider Provider { get; }

        public RequestLocalizationCookiesMiddleware(IOptions<RequestLocalizationOptions> requestLocalizationOptions)
        {
            Provider =
                requestLocalizationOptions
                    .Value
                    .RequestCultureProviders
                    .Where(x => x is CookieRequestCultureProvider)
                    .Cast<CookieRequestCultureProvider>()
                    .FirstOrDefault();
        }

        public async Task InvokeAsync(HttpContext context, RequestDelegate next)
        {
            if (Provider != null)
            {
                var feature = context.Features.Get<IRequestCultureFeature>();

                if (feature != null)
                {
                    // remember culture across request
                    context.Response
                        .Cookies
                        .Append(
                            Provider.CookieName,
                            CookieRequestCultureProvider.MakeCookieValue(feature.RequestCulture)
                        );
                }
            }

            await next(context);
        }
    }

多语言资源文件位置

多语言资源文件的目录结构要与项目的目录结构一致

如何快速高效的维护资源文件

这里我给大家介绍一个插件ResXResourceManager

维护你的多国语言

也可以导出Excel/用户工具翻译后导入

最后

如果你有什么问题可以留言告诉我,同时欢迎你一起参与开发,这个项目还会持续更新下去 源代码:RazorPageCleanArchitecture Demo:http://razor.i247365.net

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现的效果
  • Github
  • 多语言实现的方法
    • 配置开启多语言服务
      • CookieRequestCultureProvider 从cookie读取设定的语言环境
      • 多语言资源文件位置
      • 如何快速高效的维护资源文件
        • 维护你的多国语言
          • 也可以导出Excel/用户工具翻译后导入
          • 最后
          相关产品与服务
          消息队列 TDMQ
          消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档