简介:Aras 11 SP9 汉化补丁是面向 Aras Innovator 11 SP9 中国用户的本地化资源包,适用于正在部署或日常维护 PLM 系统的企业技术人员与管理员。该补丁将英文操作界面完整转换为简体中文,大幅降低非英语背景员工的学习成本,提升产品数据管理、变更控制与项目协同中的操作效率。包体共196个文件,以182个 xml 语言文件为核心,覆盖菜单、按钮、提示信息等界面元素;另有4个 bat 脚本用于导入导出中文包与重启服务,配合 exe 语言工具、dll 库及 cmd/config 配置文件,可完成从资源替换到界面验证的整套流程。整体仅856KB,轻量易部署;已有602人学习下载,目录结构清晰,脚本与语言文件分类存放,便于后续复用。对需要快速完成 Aras 系统本土化落地的团队而言,这份补丁省去了手工翻译和反复配置的环节,是提升软件可用性的实用工具。
1. Aras 11-sp9 汉化补丁不是拷贝 DLL:它要把界面文案、业务数据和报表模板按 zh-CN 重新落一遍
遇到过很多次这种场景:某个团队把 Aras 11-sp9 的 PLM 系统部署完,业务部门一打开界面就摇头,英文菜单、英文表单、英文工作流,最后验收卡在“看不懂”三个字上。于是汉化就被当成一个补丁买回来,结果发现它不是双击安装的 exe,也不是覆盖一下就结束的资源包。Aras 11-sp9 的汉化补丁,实际要处理三层东西:官方机制里的本地化文件、业务数据表里的显示名称、以及报表模板里的字体和样式。前两层做完,界面大体能看;第三层不做,导出 PDF 时中文照样变成方框。这篇文章适合正在做 Aras 实施、接手旧库运维、或者准备做多语言交付的顾问和管理员。目标很直接:讲清机制,给出能复现的步骤,再把常见的坑一次性列出来。
2. 汉化对象拆解:界面字符串、业务数据和报表模板是三层活
2.1 官方本地化机制:语言、字符串、本地化文件的三级结构
Aras 的 Web 客户端渲染表单时,每个控件都会带一个字符串 key,比如某个输入框的标签可能是part.title,系统根据当前用户的显示语言去匹配对应的中文翻译。匹配成功就显示中文,匹配失败则回退到英文默认值,甚至直接露出part.title这种原始 key。这就是你在现场看到“半英文、半天书、偶尔冒个 key”的根本原因。
这个体系分为三个级别。第一级是语言项,也就是系统里存在的语言记录,常见的有en、de、zh-CN。第二级是本地化文件,Aras 里对应的 ItemType 通常叫 Localization File,里面存的是 key、英文原文、各国语言翻译值这三者的映射关系。第三级是业务数据层,也就是零件类型名称、生命周期状态名、工作流节点名这类实际数据。官方文本的翻译走第二级,自定义数据的中文显示要改第三级。
实际踩坑往往出现在这里:很多人给系统加了一个zh-CN语言项,就认为汉化完成,结果界面还是英文。其实zh-CN只是给了系统一个可选的显示语言标识,本地化文件里还没有对应中文内容,系统自然只能回退到英文。只有把语言项、本地化文件、业务数据三层同时落实到同一语言上,界面才会真正变中文。
提示:这三层里,第一层是开关,第二层是墙面,第三层才是业务里最容易暴露问题的部分。
2.2 动手前先核对三件事:版本、权限、现有语言资产
做汉化前先确认三件事,能省掉后续大量返工。
第一是版本。在登录窗口的“关于”页面里查当前的构建版本,确认确实是 11.0 SP9。如果应用服务器已经打了补丁而数据库还停在旧补丁级别,本地化文件的 key 集合会不一致,打开表单时容易出现找不到 key 的提示。第二是权限。本地化文件导入和语言项创建都属于管理操作,普通账号即使能登录也不能写。先确认当前账号具备管理员角色。
第三是现有语言资产。很多老环境其实已经有过一轮汉化,可能是前任实施顾问留下的零散本地化文件,也可能是某个外包团队导了一半的项目。先按语言过滤搜一遍现有本地化文件,能复用的直接拿过来,比从零翻一万个词条快很多。
查询服务包级别时,用 Aras 方法编辑器写一段 C# 更直观:
// Aras 方法编辑器里执行:读取当前服务包版本 Item svc = this.newItem("Service", "GetVersion"); Item res = svc.apply(); return res.getProperty("version", "") + " / " + res.getProperty("build", "");这里newItem("Service", "GetVersion")调用的是 Aras 标准的版本查询服务,前提是当前连接成功且账号有读取权限。返回的version和build字段需要与安装介质上的补丁号比对,确认 11 SP9 无误后再继续。
2.3 开发机与生产机要注意的事情:先备份、后改库、留脚本
汉化过程分界面操作和数据库操作两类。界面导入一般不会直接破坏数据,但批量 SQL 更新显示名称是有风险的。修改生产库之前,先做一次数据库备份,这是最基本的后悔药。
-- SQL Server 中备份 Aras 数据库,路径按实际环境调整 BACKUP DATABASE [Innovator] TO DISK = N'D:\Backup\Innovator_Before_CN.bak' WITH INIT, COMPRESSION;INIT表示覆盖同名备份文件,COMPRESSION可以压缩备份体积,如果磁盘空间紧张就保留。备份完成后,顺手记录当前库里的语言数量,方便汉化前后做对比:
-- 统计语言项数量,表名按实际库结构调整 SELECT COUNT(*) AS language_count FROM [Language];注意:
[Language]表名在不同版本里可能有差异,执行前先在测试库确认,不要盲目在生产环境跑。
我一般会在项目目录里单独建一个汉化补丁文件夹,里面放三类东西:官方导出的 XML、业务数据更新 SQL、报表样式 CSS。这样汉化本身也成为可审计的资产,而不是“某个人在某天改了一些数据库字段”。
3. 跑通最小汉化链路:从创建 zh-CN 语言到回补翻译文件
3.1 第一步:把 zh-CN 语言建出来
先在系统里确认是否存在zh-CN语言。登录 Aras,进入“管理”下的“语言”页面,左侧列表里通常只有en,如果已经有zh-CN,跳过创建这一步。
新建语言的操作路径比较固定:
- 点击“新建”按钮;
- 名称填写
zh-CN,描述写“简体中文”; - 保存后用管理员账号重新登录一次。
这一步的意义是让系统承认“存在一种简体中文的显示选项”。记住,它不负责翻译内容。很多新手在这里就停顿了,以为建完语言界面会自己变中文,实际还得继续做本地化文件的生成和翻译。
3.2 生成并导出本地化文件
语言项建好之后,进入“管理”下的“本地化文件”页面。新建一个本地化文件对象,在“范围”或者“类型”字段里选择覆盖主界面与通用表单的那一项,这个选项在不同补丁级别里叫法略有差异,本质是告诉系统“你要拉取哪些范围内的字符串”。
保存后,在本地化文件对象上找“生成”按钮,系统会自动遍历当前范围内所有 key,把英文默认值拉进文件并按语言分组。生成耗时取决于库内表单数量,表单多时可能需要几分钟。
生成完成,可以导出为 XML 文件。这个 XML 是后续批量翻译的原料,结构大体如下:
<localization language="en" locale="zh-CN"> <string key="login.button.signin"> <value language="en">Sign In</value> <value language="zh-CN"></value> </string> <string key="form.title.part"> <value language="en">Part</value> <value language="zh-CN"></value> </string> </localization>这个结构只是一个简化的示意,真实 XML 的节点名和命名空间会多一些,你需要关注的是key与value的对应关系。注意观察:en里的 value 都有内容,zh-CN里的 value 是空的,这表示汉化工作还完全没有开始。如果你看到的 XML 里中文 value 已经有值,说明之前有人导过一部分,你只需要补空缺。
3.3 用 Excel 或文本工具批量翻译再回补
批量翻译不建议直接在 Aras 界面上逐条填写,效率太低。常见的做法是把导出的 XML 拆成三列:key、英文原文、中文翻译。
翻译环节有几个细节需要注意。如果翻译由业务部门协助完成,只交给他们 key 和英文,中文列留空,并明确标注哪些词不允许改动,比如零件号前缀、状态代码、审批动词。翻译完成后回到技术人员手里,再拼回 XML。
用 Excel 编辑后重新保存成 XML 时,最容易出问题的地方是编码和节点顺序。保存时务必使用 UTF-8 编码,如果不确定,就用文本编辑器打开确认。用 Python 做批量回填是一个比较稳的路径:
import xml.etree.ElementTree as ET # 解析导出的原始文件 tree = ET.parse("localization_src.xml") root = tree.getroot() # 这里用字典表示 Excel 里整理好的翻译结果 translations = { "login.button.signin": "登录", "form.title.part": "零件", } # 遍历字符串节点,把对应语言的 value 替换为中文 for string_node in root.iter("string"): key = string_node.attrib.get("key") if key in translations: for value_node in string_node.findall("value"): if value_node.attrib.get("language") == "zh-CN": value_node.text = translations[key] tree.write("localization_zh.xml", encoding="utf-8", xml_declaration=True)参数说明:xml_declaration=True保证输出文件带上 XML 声明头,避免导入时被按默认编码解析;findall("value")只遍历同一个 key 下的所有 value 节点,再通过language属性定位到中文位置。如果你的 XML 带命名空间,需要把标签名改成带命名空间的形式,否则遍历结果为空。
回填完成后,回到“本地化文件”页面,使用“导入”按钮选择刚才生成的文件。导入结束会提示新增和更新的翻译条数,保存后记得再次确认本地化文件关联的语言确实是zh-CN。
3.4 发布语言设置并验证走通
翻译数据进了系统,界面还是不会自己切换,因为当前用户的显示语言可能仍是英文。管理员账号进入“工具”->“选项”->“界面语言”,把显示语言切换为中文,然后注销并重新登录。
验证走通至少看三个检查点:
- 登录页是否出现中文“登录”按钮;
- 左侧树、顶部菜单、搜索区域能否切换为中文;
- 随机打开一个标准表单,比如零件或文档,看字段标签后面有没有残留英文 key。
如果登录页还是英文,先不要急着认为汉化失败,登录页很可能使用了客户端静态资源,和本地化文件的加载时机不完全一致,但要记录的排查起点。主界面字段里的残留 key 通常是本地化文件范围没选全,重新生成一份覆盖范围更大的文件再导入。
4. 补丁的工程化玩法:用 SQL 和样式把自定义业务项、生命周期与报表一起汉化
4.1 哪些场景必须绕过界面直接改库
界面导入本地化文件适合处理官方翻译,但实际项目里还有很多内容无法通过它覆盖,典型有三类:
第一类是自定义 ItemType。业务在实施中新建的“供应商评审”“BOM 对比”“客户投诉单”等类型,显示名称存在业务数据表里,不在本地化文件的 key 表里,界面上的“新建本地化文件”对它们无效。
第二类是生命周期状态与工作流。状态名称比如Draft、In Review、Released在业务数据层是 English 标识,界面显示名没有跟着新语言走,导致表单主区域是中文,状态栏却卡在英文。
第三类是多环境同步。开发库、测试库、生产库各来一遍人工汉化,容易漏改也容易改错,脚本化的 SQL 更新能保证环境之间一致。
需要说明的是,直接改库不是官方推荐的标准做法,而是对官方本地化机制覆盖不到的领域做补充。能用界面的先走界面,界面管不到的再写 SQL。
4.2 批量更新自定义项、生命周期状态与工作流显示名
以生命周期状态为例,先做一次查询确认英文名称,再逐条更新中文显示名。
-- 生命周期状态汉化示例,列名以实际库为准 BEGIN TRANSACTION; UPDATE lifecycle_state SET display_name = N'草稿' WHERE name = 'Draft'; UPDATE lifecycle_state SET display_name = N'审批中' WHERE name = 'In Review'; UPDATE lifecycle_state SET display_name = N'已发布' WHERE name = 'Released'; -- 检查受影响记录 SELECT name, display_name FROM lifecycle_state WHERE name IN ('Draft', 'In Review', 'Released'); -- COMMIT; -- 确认无误后再提交这里的关键是display_name与name的区别:name是系统内部标识,工作流判断、权限规则、报表过滤都依赖它,不能动;display_name是界面展示层,改成中文不影响任何逻辑。SQL 中给中文字符串加N前缀是 SQL Server 处理 Unicode 的标准写法,字段类型是 NVARCHAR 时才能正确存储。
自定义 ItemType 的做法类似,但表名要换成对应的业务表。例如:
-- 自定义类型显示名称汉化示例 UPDATE itemtype SET display_name = N'供应商评审' WHERE name = 'SupplierReview';这类更新有一点需要特别注意:很多 Aras 环境的表名和字段名因为二次开发被改过,不能拿着网上一段 SQL 直接跑。建议先在测试环境查看实际结构,再复制到生产库执行。
4.3 报表与表单样式:让 PDF 和页面都不再出现中文字体缺口
数据层汉化完成之后,下一个翻车点往往在报表。Aras 的报表模板常用 HTML 加 XSLT 或 SVG 方式生成,最终由服务器端的渲染引擎产出 PDF。如果服务器没有中文字体,PDF 里的中文就会变成方框或空白,而界面上看起来一切正常,因为浏览器渲染用的是客户端本机字体。
处理方式有两个层面。第一层是在应用服务器上安装中文字体,比如微软雅黑、宋体,然后重启应用池。第二层是修改报表模板里的 CSS,把写死的英文字体改成中英混排可回退的字体栈:
/* 报表模板中英文字体回退示例 */ body, td, div, span { font-family: "Microsoft YaHei", "PingFang SC", "Noto Sans CJK SC", Arial, sans-serif; }字体声明的顺序体现了回退机制:系统优先使用微软雅黑,找不到再依次尝试苹方和思源黑体,最后才落到 Arial。Arial 本身不包含中文字形,但没有它,遇到纯英文数字段落时字体会显得偏窄,所以保留在末尾做兜底。
不要为了图省事直接对全站所有 CSS 做替换,那样影响面太大。只针对报表模板和特定表单样式添加lang="zh-CN"的条件选择器,比全局替换更稳。
5. 汉化避坑排查:五个高频翻车点与恢复动作
5.1 切到中文后主界面还是大面积英文
现象:用户切换显示语言到zh-CN,注销重登后,左边树、顶部菜单、表单标签仍是英文,只有登录页局部变化。
原因:多数情况是本地化文件没有正确关联目标语言。新建本地化文件时语言字段默认是en,导入的翻译被挂到了英文头上。也有可能是导入了文件但没有执行“发布语言设置”这个动作,切换语言没有真正触发重新加载。
解决:回到“本地化文件”页面,检查每条本地化文件的语言字段,确认与zh-CN对应;如果语言字段不对,新建一条正确的文件,再次导入。导入后去“工具”->“选项”里切换语言,并注销重登,不要只刷新浏览器。
5.2 中文导入后变成乱码或问号
现象:界面中原本应该显示中文的位置出现???或者一串明显错误的字符,但到数据库里直接查看,中文数据又是正常的。
原因:大部分是 XML 文件编码问题。Excel 编辑后默认保存成 ANSI 或带 BOM 的 UTF-8,Aras 导入端读取时按错误编码解析,最终把中文字符替换成问号。另有少部分是 SQL Server 列类型仍是varchar,中文字符写入后被截断成乱码。
解决:重新导出 XML,用文本编辑器或 Python 脚本统一转成不带 BOM 的 UTF-8,再导入一遍。数据库列类型问题不建议直接改官方表,因为改列类型影响索引和约束;稳妥做法是让实施团队确认是否升级为 NVARCHAR,或者对自定义业务表单独增加中文列处理。
5.3 官方词条翻译了,自定义 ItemType 名称还是英文
现象:标准表单全部中文化,但自己新建的业务类型名称,比如“供应商评审”“测量记录”,依然显示英文原名。
原因:自定义 ItemType 的显示名称不在本地化文件的 key 表里。本地化文件只能管理框架层和标准表单的字符串,业务层类型名称由数据记录本身的显示名字段决定。
解决:对自定义 ItemType 执行显示名的 SQL 更新,参考第 4.2 节里的写法。更新完成后需要刷新“相关类型”和列表网格配置,否则缓存会让旧名称继续显示一段时间。
5.4 升级服务包后,汉化结果丢了一半
现象:原本已经完整的汉化环境,安装新的服务包或补丁后,表单标签、命令栏恢复英文,部分模块甚至报找不到字符串 key 的错误。
原因:服务包升级可能更新表单定义和本地化文件中的默认值。官方的英文默认值被重新带入,新增的 key 还没有翻译记录,旧的 key 也可能被覆盖回英文。
解决:升级前导出本地化文件作为基线备份,升级后执行一次增量翻译对照,把新增 key 的翻译补上。这里一定要做增量脚本,只处理新增和变化的 key,不要用旧文件整体覆盖,否则现场已经调整过的措辞会被抹掉。把这段流程写进升级 check list,比每次靠记忆翻工更可靠。
5.5 PDF 报表中文变方框
现象:界面上中文显示正常,导出 PDF 或打印预览时,中文全部变成方框或空白。
原因:PDF 渲染是在应用服务器端完成的,服务器没有安装可用的中文字体,渲染引擎找不到中文字形,只能输出方框。
解决:在应用服务器上安装中文字体,比如微软雅黑,然后在报表模板的 CSS 里补充中文字体回退。安装完重启应用池,重新导出试一次。还有一种特殊情况是报表引擎自己不读操作系统字体列表,需要把字体文件放到引擎指定的字体目录下,这一条根据实际报表组件确认。
6. 把汉化补丁固化进代码库:验证清单与升级前的收尾习惯
6.1 一套可复用的验证清单
每次完成汉化补丁,按下面的清单过一遍。
| 检查对象 | 期望结果 | 检查方式 |
|---|---|---|
| 登录页 | “登录”“用户名”为中文 | 无痕窗口重新登录 |
| 全局菜单/左侧树 | 主要菜单项为中文 | 切换语言后刷新 |
| 标准表单 | 字段标签无英文 key 残留 | 打开零件、文档各一张 |
| 自定义 ItemType | 类型名称与列表标题为中文 | 搜索自定义类型 |
| 生命周期状态 | 状态字段与流程图节点为中文 | 打开一个流程中的项目 |
| 报表导出 | PDF 内中文显示正常 | 实际导出一份 |
| 其他用户 | 原有语言偏好不被破坏 | 用只读账号登录确认 |
最容易漏的是最后一条:如果管理员把默认语言改成中文,原本选了英文的用户会受影响;如果只改了管理员自己的语言,业务用户看到的仍是英文。项目交接时务必写明汉化补丁影响的是默认语言还是个人语言设置。
6.2 构建增量升级脚本时的习惯
从实践角度,我建议把汉化当作独立交付物处理:一份 XML 翻译文件加一份 SQL 增量脚本。XML 对应官方本地化文件,SQL 对应业务层显示名和报表字体设置。两份文件放进代码库的本地化目录,提交信息里注明对应的 Aras 服务包版本和导入日期。
升级服务包时,先看 release notes 是否包含本地化文件变更,再跑增量脚本。跑完重新登录,执行 6.1 的七项清单。
6.3 一个收尾习惯:把中文语言包当成备份资产
我自己踩过最大的坑是汉化做完了,但没人记录哪些本地化文件来自官方、哪些是自己配的,后续接手的人把整个语言包删掉重装,界面直接退回英文。现在我在项目交接文档里固定写一段:汉化补丁位于代码库指定目录,安装顺序是先导语言包、再跑 SQL 脚本,每次升级服务包前必须重新验证,不允许直接在生产库手改 key。
这个习惯一开始看着繁琐,但当系统里有两百多个自定义类型、几十个工作流时,它其实是唯一能让你分清“哪些中文是业务约定、哪些是翻译默认值”的办法。希望帮到你。
本文还有配套的精品资源,点击获取