项目需要实现国际化?不妨来试试它

之前造了一个多语言国际化的轮子,第一个版本UI的体验感不是太好,用balzor重新实现了一个UI,体验感应该还算不错。

LinguaNex

LinguaNex是一个多语言连接中心,主打一个一处配置多语言,多处使用的想法。让项目方便快捷实现国际化(多语言)。

可配关联项目,主项目关联其他项目即可获取其他项目的多语言资源,相同Key则优先取主项目中的资源(即覆盖)。

批量导入已存在项目多语言资源。(目前只支持上传JSON文件)

自动翻译,翻译效果根据不同翻译Provider效果不一致。(目前支持百度翻译,有道翻译,腾讯翻译,阿里翻译,AI翻译)

导出多语言文件,目前支持Json,xml,toml,ts以及properties文件

GitHub地址:https://github.com/fanslead/LinguaNex

运行环境

  • .NET 8
  • Redis
  • RabbitMQ(可选).
  • EF Core SQLLite(可自行替换数据库)

测试环境

http://47.119.20.111

http://47.119.20.111/swagger/index.html

用途

通过API/SDK拉取多语言资源加载,可选WebSocket对接实现即时更新多语言资源。

  • API后端项目响应内容,如错误码对应的Message国际化多语言处理。
  • Web项目国际化多语言集成,可导出多语言文件编译,或对接API/SDK即时获取加载数据。
  • APP项目与Web基本一致。

先看看效果图

项目页面,点击tag即可复制Id

关联项目页面

下载多语言文件

地区资源页面

新增地区

添加资源

上传资源文件

编辑资源

如何接入

目前除了.NET SDK正常使用外,其他SDK暂时不清楚有没有什么BUG~~

OpenApi接入

请求地址:/api/OpenApi/Resources/{ProjectId}?cultureName=&all=

  • ProjectId表示项目ID
  • cultureName 可选参数,不传则默认当前请求环境语言资源。
  • all 可选参数,默认false,cultureName为空时,true则返回所有语言资源

响应结构如下:

复制代码
[
  {
    "cultureName": "zh-Hans",
    "resources": {
      "Hello": "你好"
    }
  },
  {
    "cultureName": "en",
    "resources": {
      "Hello": "Hello"
    }
  }
]

SignalR接入(c#例子)

c# 复制代码
var connection = new HubConnectionBuilder()
    .WithUrl($"{linguaNexApiUrl}/hubs/LinguaNex?project={project}", Microsoft.AspNetCore.Http.Connections.HttpTransportType.WebSockets)
    .AddJsonProtocol()
    .WithAutomaticReconnect()
    .Build();

connection.On<LinguaNexResources>("CreateOrUpdateResource", obj => 
{
    if (_resourcesCache.TryGetValue(obj.CultureName, out var value))
    {
        foreach (var resource in obj.Resources)
        {
            value[resource.Key] = resource.Value;
        }
        _resourcesCache[obj.CultureName] = value;
    }else
    {
        _resourcesCache[obj.CultureName] = new ConcurrentDictionary<string, string>(obj.Resources);
    }
});

connection.StartAsync();

//拉取资源 参数跟OpenApi接口一致
connection.InvokeAsync<List<LinguaNexResources>>("GetResources", projectId, cultureName,all);

.NET SDK 接入

目前本项目后端已用SDK自己对接自己了~

c# 复制代码
builder.Services.AddLinguaNexLocalization(options =>
{
    options.LinguaNexApiUrl = builder.Configuration["LinguaNex:ApiUrl"];
    options.Project = builder.Configuration["LinguaNex:Project"];
    options.UseWebSocket = true;
});
builder.Services.AddLocalization();

app.UseRequestLocalization();

Java SDK 接入

java 复制代码
public static void main(String[] args) {
        ResourceBundleMessageSource source = new RemoteSourceBundle();
        GlobalProp.initFromYaml(null);
        Locale locale = new Locale("zh-Hans");
        BundleTest test = new BundleTest();
        System.out.println(source.getMessage("40004", null, locale));
    }

JS SDK 接入

js 复制代码
const { initLinguaNex, setLocale, getLocale, getAllLocale, L } = linguanex
initLinguaNex({
    baseUrl: 'http://47.119.20.111',
    locales: ["zh-CN", "en"],
    defaultLocale: 'zh-CN',
    project: 'C96755D0-C22C-4DAD-9620-AF64C4C3D9D7'
})
.then(() => {
    console.log(L('Hello'));
    setLocale('aa')
    .then(() => {
        console.log(L('Hello'));
        console.log(getAllLocale());
    })
    console.log(getLocale("zh-CN"));
})

Last

欢迎大佬们体验并提提优化建议,或者PR~

希望可以实现更多SDK,方便更多语言的项目可以对接使用,助力项目实现国际化。

相关推荐
时光追逐者16 分钟前
在 Blazor 中使用 Chart.js 快速创建数据可视化图表
开发语言·javascript·信息可视化·c#·.net·blazor
EdisonZhou2 天前
使用MCP C# SDK开发MCP Server + Client
llm·aigc·asp.net core·.net core
黑贝是条狗6 天前
对.net 的改变
.net core
小吴同学·11 天前
NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL
中间件·c#·.net·.netcore·.net core
坐望云起12 天前
ASP.NET Web的 Razor Pages应用,配置热重载,解决.NET Core MVC 页面在更改后不刷新
前端·后端·asp.net·mvc·.net core·razor pages
超软毛毛虫14 天前
ASP.NET Core 模型验证消息的本地化新姿势
asp.net core·localization
代码拾光24 天前
.NET Core 中如何实现缓存的预热?
.net core
SchuylerEX1 个月前
第三章 组件(12)- 自定义组件类库
前端·c#·.net·blazor·razor·ui框架
EdisonZhou1 个月前
基于Microsoft.Extensions.AI核心库实现RAG应用
llm·aigc·.net core
时光追逐者1 个月前
一个开源且免费的 .NET CMS 和应用程序框架
开源·c#·.net·cms·.net core