首页 > 其他分享 >项目需要实现国际化?不妨来试试它

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

时间:2024-02-29 17:36:15浏览次数:18  
标签:国际化 obj 语言 LinguaNex 项目 试试 不妨 cultureName SDK

之前造了一个多语言国际化的轮子,第一个版本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

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则返回所有语言资源

响应结构如下:

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

SignalR接入(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自己对接自己了~

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 接入

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 接入

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

标签:国际化,obj,语言,LinguaNex,项目,试试,不妨,cultureName,SDK
From: https://www.cnblogs.com/fanshaoO/p/18044824

相关文章

  • 求求你别再用OkHttp调用API接口了,快来试试这款HTTP客户端库吧
    引言在日常业务开发中,我们时常需要使用一些其他公司的服务,调用第三方系统的接口,这时就会涉及到网络请求,通常我们可以使用HttpClient,OkHttp等框架去完成网络请求。随着RESTfulAPI的普及,一个高效、简洁且易于维护的HTTP客户端库显得尤为关键。而本文主要介绍一款强大的网络客户端......
  • 网购衣服经常不合身?试试这款虚拟服装试穿工具
    大家好,我是Java陈序员。可以说,现在网购已经完全融入到了我们的日常生活中。小到一根笔,大到一件衣服都能在网上买!但是,我们在网上买衣服时,经常会因为衣服不合身而需要退换,这需要花费一定的成本。今天,给大家介绍一款高度可控的虚拟服装试穿工具,可以让你在线体验衣服试穿的效果。......
  • 级课堂测试试卷—数据同步练习
    石家庄铁道大学2024年春季  2022级课堂测试试卷—数据同步练习课程名称: 大数据库技术与应用  任课教师:王建民  考试时间: 120分钟  一、 数据结构分析:(1)京津冀三省的2015年度的科技成果数据原始表,为Access数据库,; (2)要求将三省的科技成果数据汇总到同一表中(要......
  • 发着试试【doge】
    `#include//牢大includeusingnamespacestd;templateclasssmallest_heap{private:itemheap[10001];intlen;public:smallest_heap();voidpush(itemconst&);voidpop();itemtop();intsize();boolempty();};templatesmallest_heap::smallest_heap()......
  • 还在担心报表不好做?不用怕,试试这个方法(二)
    前言在上一篇文章《还在担心报表不好做?不用怕,试试这个方法》中,小编分享了如何使用模板语言生成报表的过程。今天小编进一步介绍模板语言中一些基本的概念和用法,因此读者可以配合上一篇文章一起看。本文介绍的内容有:模板文件绑定数据源单元格扩展模板属性分组排序公式1......
  • 大学电路搜题软件哪个好?寻找完美解答?试试这款大学搜题工具
    大学生搜题软件是一种方便快捷的工具,可以帮助大学生们在解答问题和完成作业时节省时间和精力。1.快解题这是一个网站是一款服务于职业考证的考试搜题软件,拥有几千万不同考试医学考试题库和执业医师试题库,通过章节练习,模拟试题,历年真题等练习来让不同的用户学习和巩固知识,使他......
  • 零侵入!试试这款Api接口文档生成器!
    大家好,我是Java陈序员。作为一名合格的程序员,不仅代码要写好,而且文档要写好。虽然目前有成熟的框架可以快速生成接口文档,如大名鼎鼎的Swagger.但是Swagger需要编写大量的注解来辅助生成文档,侵入了业务代码。不符合高内聚、低耦合的编程规范!今天,给大家介绍一款零侵入的Api......
  • AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
    AI绘画平台难开发,难变现?试试StableDiffusionAPIServerless版解决方案136人阅读14分钟前分享全屏显示Stable Diffusion 模型,已经成为 AI 行业从传统深度学习时代走向 AIGC 时代的标志性里程碑。越来越多的开发者借助 stable-diffusion-webui (以下简称 SDWeb......
  • 还在担心报表不好做?不用怕,试试这个方法
    前言在各种业务场景中,我们经常需要生成各种报表,例如学校中的学生成绩表、商业场景中的销售单和发票单、测量检测场景中的检测报告等等。这些报表对于组织和管理数据非常重要,因为它们提供了直观、清晰的方式来展示和分析数据。一般情况下,使用Excel设计和生成这些报表就可以,但是随......
  • AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
    作者:王佳、江昱、筱姜StableDiffusion模型,已经成为AI行业从传统深度学习时代走向AIGC时代的标志性里程碑。越来越多的开发者借助stable-diffusion-webui(以下简称SDWebUI)能力进行AI绘画领域创业或者业务上新,获得高流量及商业价值,但是面对多客户、高并发的复杂场景,使用原......