前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >项目需要实现国际化?不妨来试试它

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

作者头像
饭勺oO
发布2024-03-01 14:00:22
870
发布2024-03-01 14:00:22
举报

之前造了一个多语言国际化的轮子,第一个版本UI的体验感不是太好,用blazor重新实现了一个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

image
image

关联项目页面

image
image

下载多语言文件

image
image

地区资源页面

image
image

新增地区

image
image

添加资源

image
image

上传资源文件

image
image

编辑资源

image
image

如何接入

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

OpenApi接入

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

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

响应结构如下:

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

SignalR接入(c#例子)

代码语言:javascript
复制
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自己对接自己了~

代码语言:javascript
复制
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 接入

代码语言:javascript
复制
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 接入

代码语言:javascript
复制
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,方便更多语言的项目可以对接使用,助力项目实现国际化。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LinguaNex
  • 运行环境
  • 用途
  • 先看看效果图
    • 项目页面
      • 关联项目页面
        • 下载多语言文件
          • 地区资源页面
            • 新增地区
              • 添加资源
                • 上传资源文件
                  • 编辑资源
                  • 如何接入
                    • OpenApi接入
                    • SignalR接入(c#例子)
                      • .NET SDK 接入
                        • Java SDK 接入
                          • JS SDK 接入
                          • Last
                          相关产品与服务
                          云数据库 Redis
                          腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档