Java开源ERP系统Axelor汉化方法初探

Axelor简介

汉化过程介绍

定义语言和本地化

导出多语言记录

导入翻译

验证翻译

调整翻译


  • Axelor简介

        2024年6月份Axelor ERP发布了8.1版本,适配JDK11及PostgreSQL12及以上版本(7及以前版本适配JDK8及PostgreSQL10)数据库。v8版本较之前版本在界面上有很大的变化,深色(Dark)主题更Nice了。

浅色(Light)主题仍保持Axelor的简洁明亮的风格。Axelor在java开源ERP系统中具有很强的竞争力。

        Axelor使用Gradle作为构建工具,前端采用ReactJS,但基本不需要开发人员写前端代码,官方的open-suite-webapp(一套完整的ERP系统,也就是本文中描述的这套系统)中也只有axelor-human-resource和axelor-project两个模块有单独的js模块代码,其余均为java或groove代码,因此对项目二次开发支持还是相当友好。

        Axelor发布的版本中集成了Studio开发环境、BPM Studio以及WS Studio,使得二次开发效率得到更好的提升。本文中就不对这些内容展开描述了。以下截图为示例BMP流程(披萨发货流程)

Studio主要用于界面设计的调整,也可以进行项目的实体设计等,类似Axelor的一个低代码开发平台。

        Axelor ERP多语言支持方面较Odoo(另外一个Python语言的开源ERP)要少很多,Odoo17中支持的多语言有72种,而Axelor默认的只有英语和法语,但是Axelor中,多语言的处理也还算友好,并不复杂。下面就介绍一种简单的快速翻译成中文的处理方法,供Axelor爱好者参考。

  • 汉化过程介绍

        汉化处理的过程大体分为以下几个步骤:

  • 定义语言和本地化

        增加语言:进入Application config->General data->Language增加中文记录,如下:

        增加本地化:进入Application config->General data->Locallizatuions增加中文记录,如下:

  • 导出多语言记录

        官网对这部分的介绍并不详细,论坛中推荐的方式是通过Advanced Export(Application config->Technical maintenance->Advanced Export),然后做后续的处理,本文采用的是直接从数据库表获取记录方式。

        Axelor的多语言记录全部保存在数据库表“meta_translation”中,所以只要把这里的记录导出后进行翻译即可,该表的结构也很简单:

        翻译主要用到的就是message_key和message_value两个字段,其中message_key是程序中处理和检索多语言的键值,字符串类型,根据模块中开发人员熟悉的语言进行预定义,message_value是界面中显示的内容,所以真正要翻译的就是message_value。因此这里只要把这两个内容导出来,对message_value进行翻译后再导入到meta_translation表中即可。

        假设我们希望通过英文的多语翻译成中文,那么只要在SQL工具中执行以下语句,并将结果保存为excel文件即可(本文使用Google文档翻译,所以导出Excel,如果使用其他文档翻译器,根据文档翻译器支持的文档格式导出或者导出后再转换),导出的文件编码为UTF-8

select message_key,message_value from meta_translation where language = 'en' and  COALESCE(message_value,'') !='';
  • 导入翻译

        将上述字段导出Excel后,将文件另存一份,其中一份只保留需要翻译的message_value这一列(这里假设为文件B,原始导出的文件为A),然后把文件交给Google进行翻译,将翻译后的文件下载(这里假设文件C),将C中内容复制到文件A中(注意不要错行),然后在Excel中通过公式方式做SQL拼接,将A文件中的message_value和message_key拼接为insert语句,

INSERT INTO meta_translation (id,  version, message_key, language, message_value) 

其中,id取值为nextval('meta_translation_seq'), version取值为0,languzge取值为"zh",message_value和message_key分别为Excel表中的行记录。将拼接好的SQL通过SQL命令行或者工具执行插入。这里需要补充说明的是,由于key和value的值中均有可能存在单引号或者双引号这种特殊字符,需要对这两部分的值针对这些特殊字符进行替换处理,以保证拼接后的SQL能正常执行,当然也可以忽略这些内容,后续手工再做翻译的调整。

  • 验证翻译

        打开应用右上角的用户配置,选择中文。

        界面中如果已经能正常显示中文即表示翻译已经生效

加载完成后

打开一个节点

如果希望登陆界面也默认是中文,需要修改Axelor系统的启动配置文件中的application.locale = zh_CN,具体间在线文档。

  • 翻译调整

      由于不同翻译器对计算机系统这种相对比较专业的翻译并不一定完全符合使用习惯,因此,如果对机器翻译的结果不满意时,可以通过Administration->View Management->All Translations进行调整处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/367624.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle - 数据库打补丁实践

原文:https://www.cnblogs.com/ddzj01/p/12097467.html 一、概述 本文将介绍如何给oracle数据库打最新补丁,数据库版本为11.2.0.4单实例,操作系统为redhat6.5 二、下载相关升级包 1. 登录MOS,查阅(ID 2118136.2),下载…

TDD测试驱动开发

为什么需要TDD? 传统开发方式,带来大量的低质量代码,而代码质量带来的问题: 1.在缺陷的泥潭中挣扎 开发长时间投入在缺陷的修复中,修复完依赖测试做长时间的回归测试 2.维护困难,开发缓慢 比如重复代码&am…

Stm32的DMA的学习

一,介绍 二,DMA框图 三,DMA通道 四,相关HAL库函数 五,配置DMA 六,Stm32CubeMX配置 【13.1】减少CPU传输负载 DMA直接存储器访问—Kevin带你读《STM32Cube高效开发教程基础篇》_哔哩哔哩_bilibili

sideloadly 苹果自签和sidestore手机续签ipa记录

sideloadly 地址:https://sideloadly.io/#download 直接安装对应系统软件,然后吧ipa 拖到里面续签,缺点每7天需要电脑续签 如果续签保留数据需要对应的位置开启 enable file sharing 勾选 和 bundle id 修改 注意的地方需要电脑和手机appi…

echarts-wordcloud:打造个性化词云库

前言 在当今信息爆炸的时代,如何从海量的文本数据中提取有用的信息成为了一项重要的任务。词云作为一种直观、易于理解的数据可视化方式,被广泛应用于文本分析和可视化领域。本文将介绍一种基于 echarts-wordcloud 实现的词云库,通过其丰富的…

06-java基础——集合的复习

集合的体系结构 集合主要分为两类: 单列集合双列集合 一、单列集合 list系列集合:添加的元素是有序、可重复、有索引的。 有序:指的是存和取的顺序是一致的 set系列集合:添加的元素是无序、不可重复、无索引的。 collection&…

Python爬虫实战案例——王者荣耀皮肤抓取

大家好,我是你们的老朋友——南枫,今天我们一起来学习一下该如何抓取大家经常玩的游戏——王者荣耀里面的所有英雄的皮肤。 老规矩,直接上代码: 导入我们需要使用到的,也是唯一用到的库: 我们要抓取皮肤其…

统计信号处理基础 习题解答11-11

题目 考虑矢量MAP估计量 证明这个估计量对于代价函数 使贝叶斯风险最小。其中:, ,且. 解答 贝叶斯风险函数: 基于概率密度的非负特性,上述对积分要求最小,那就需要内层积分达到最小。令内层积分为: 上述积…

【SkiaSharp绘图12】SKCanvas方法详解(一)清空、裁切区域设置、连接矩阵、注释、弧与扇形、图集、九宫格绘图、圆

文章目录 SKCanvas 方法Clear 清空ClipPath/ClipRect/ClipRegion/ClipRoundRect 设置裁切区域Concat 连接矩阵DrawAnnotation绘制注释DrawArc绘制椭圆弧、扇形DrawAtlas绘制图集(一个图像、多个区域、多个缩放、一次绘制)DrawBitmap绘制图像DrawBitmapNinePatch九宫…

停车场车牌识别计费系统,用Python如何实现?

关注星标,每天学习Python新技能 前段时间练习过的一个小项目,今天再看看,记录一下~ 项目结构 说明: datefile文件夹:保存车辆信息表的xlsx文件 file文件夹:保存图片文件夹。ic_launcher.jpg是窗体的右上角…

vector模拟实现【C++】

文章目录 全部的实现代码放在了文章末尾准备工作包含头文件定义命名空间和类类的成员变量 迭代器迭代器获取函数 构造函数默认构造使用n个值构造迭代器区间构造解决迭代器区间构造和用n个值构造的冲突拷贝构造 析构函数swap【交换函数】赋值运算符重载emptysize和capacityopera…

字符串知识点

API API和API帮助文档 API:目前是JDK中提供的各种功能的Java类。 这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。 API帮助文档:帮助开发人员更好的使用API和查询API的一个工具。 String概…

【Linux】线程封装与互斥(万字)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 C多线程的用法 对原生线程进行一次封装 理解pthread线程 Linux线程互斥 进程线程间的互斥相关背景概念 互斥量mutex 操作共享变量会有问题的售票…

eventloop 事件循环机制 (猜答案)

// eventloop 事件循环机制// console.log(555);setTimeout(() > {console.log(666);})let p new Promise((resolve,reject)>{// 同步执行console.log(111);resolve();});// promise 的回调函数是异步的微任务p.then(v > {console.log(222);}, r > {console.log(r…

解决ps暂存盘已满的问题

点击编辑->首选项->暂存盘 ps默认暂存盘使用的是c盘,我们改成d盘即可 然后重启ps

OpenSSL的一些使用案例

目录 一、介绍 二、基本使用 1、Shell (1)文件加解密 (2)生成密钥文件 2、API (1)md5sum (2)AES256加解密 一、介绍 本篇博客重点不是详细描述 OpenSSL 的用法,只…

snap和apt的区别简单了解

Linux中没有tree命令的时候提示安装的时候出现了两个命令,简单看了看两者有何区别(一般用apt就可以了): sudo snap install tree 和 sudo apt install tree 这两个命令都是用来安装 tree 命令行工具的,但它们使用的是不…

antfu/ni 在 Windows 下的安装

问题 全局安装 ni 之后,第一次使用会有这个问题 解决 在 powershell 中输入 Remove-Item Alias:ni -Force -ErrorAction Ignore之后再次运行 ni Windows 11 下的 Powershell 环境配置 可以参考 https://github.com/antfu-collective/ni?tabreadme-ov-file#how …

SpringBoot源码阅读3-启动原理

SpringBootApplication public class DistApplication {public static void main(String[] args) {// 启动入口SpringApplication.run()SpringApplication.run(DistApplication.class, args);} }1、服务构建 这里"服务"指的是SpringApplication对象,服务…

【QT】概述|对象树模型|两种控件模式|信号和槽|lambda

目录 什么是QT 特点 QT程序 main函数 QT按钮 纯代码模式 图形化模式 对象树模型 信号和槽 连接与断开 自动连接 断开连接 信号的发射 lambda表达式 基本语法 捕获列表 Lambda表达式用于信号与槽的连接 例如 什么是QT Qt是一个跨平台的C图形用户界面应用…