8.7K Star 14.3K Fork 4.2K

GVPdotNET China/Furion

 / 详情

多语言支持Json文件后,L.Text和验证特性及在异常消息不能翻译

已完成
创建于  
2023-02-08 09:11

输入图片说明

💢 特别说明:如果 Issue 没有严格按照模板编写且未提供测试源码下载或 Git 测试仓库地址,则视为无效 Issue,将无法得到答复。

Furion 版本号

哪个版本号?
4.8.5.10

.NET SDK 版本号

  • [*] .NET5
  • .NET6
  • .NET7

项目类型

  • [* ] WebApi
  • Mvc
  • Razor Pages
  • Blazor Server
  • MinApp
  • WinForm
  • WPF
  • Console

操作系统和版本

  • [ *] Windows(版本号?Windows 10)
  • Linux(版本号?)
  • MacOS(版本号?)
  • 其他(版本号?)

代码环境

  • [* ] 开发环境(Development)
  • 生产环境(Production)
  • 测试环境(Tests/单元测试/集成测试 )

描述你的问题

发生了什么?
1、多语言需要支持JSON文件,引入My.Extensions.Localization.Json包;
2、配置完成后,出现:L.Text["中文"]不能翻译;throw Oops.Oh(ErrorCode.D1000)不能翻译;通过L.GetCultures()只能获取一条数据

异常堆栈信息

异常堆栈是什么?

测试项目代码

⚠⚠ 必须提供完整可运行且包含错误的 Git 仓库 DEMO,DEMO 提供最简单的错误逻辑代码,否则将无法得到答复。⚠⚠

您的代码下载地址?

数据库信息和版本

请提供安装的 Nuget 包版本号。

  • Sqlite(包名和版本号?)
  • SqlServer(包名和版本号?)
  • MySQL(包名和版本号?)
  • Oracle(包名和版本号?)
  • PostgreSQL(包名和版本号?)
  • Firebird(包名和版本号?)
  • Cosmos(包名和版本号?)
  • InMemoryDatabase(包名和版本号?)
  • [ *] 无

期待结果

期待的结果是?
引入My.Extensions.Localization.Json包,能够兼容原多语言的功能。


确认工单

为了减少不必要的沟通成本和时间成本,请再次确认 Issue 已按照要求正确填写,否则将被直接关闭。

评论 (5)

lingl 创建了任务 2年前

不好意思,目前没有计划去研究第三方库代码和可能引起的问题:My.Extensions.Localization.Json,一没文档,二两年多才更新一次~。

Furion 的多语言是基于微软标准实现的,支持基于原生标准的第三方库,代码完全公开,可自行调试。

百小僧 任务状态待办的 修改为已完成 2年前
lingl 修改了描述 2年前

花了点时间去研究了这个第三方,发现了几次问题。

  1. 这个第三方默认配置只支持 IStringLocalizer<> 方式,未提供 IStringLocalizer 非泛型方式
  2. 你提供的代码也有问题,json 文件的格式是:完整目录限定名 才可以
    输入图片说明
  3. 使用了第三方之后还注册了 Furion 的方式导致冲突
    输入图片说明

修改之后测试正常

输入图片说明

这是这个第三方提供的例子:https://github.com/hishamco/My.Extensions.Localization.Json/tree/dev/samples/LocalizationSample.Mvc

另外你的json配置也不对,也少了这个配置:

输入图片说明


最后,Furion 代码没问题,第三方使用也没问题,而是您没有正确的按照第三方配置导致。

正确的配置

输入图片说明

完整代码

using Furion;
using Furion.Localization;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace WebApplication1
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddControllers().AddInject();

            // 添加多语言配置选项
            services.AddConfigurableOptions<LocalizationSettingsOptions>();
            var localizationSettings = App.GetConfig<LocalizationSettingsOptions>("LocalizationSettings", true);
            services.AddJsonLocalization(options => { options.ResourcesPath = localizationSettings.ResourcesPath; });
            services.AddMvc()
                 .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
                 .AddDataAnnotationsLocalization(options =>
                 {
                     options.DataAnnotationLocalizerProvider = (type, factory) =>
                         factory.Create(localizationSettings.LanguageFilePrefix, localizationSettings.AssemblyName);
                 });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseAppLocalization();

            app.UseRouting();

            app.UseAuthorization();

            // 添加这一行,如果是 MVC和API共存项目,无需添加 string.Empty
            app.UseInject(string.Empty);

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

测试结果

输入图片说明

最后反馈

Furion 框架没问题,是您对第三方没了解,也没按照文档书写。

百小僧 里程碑设置为v4.8.6 2年前
痞子再 修改了描述 2年前
痞子再 修改了描述 2年前

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
974299 monksoul 1578937227 lingl-kicai
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助