ERP开发中应用字符串解析实现界面翻译智能化

ERP中要实现界面多语言的功能,则要对各种情况的字符串进行处理并作出翻译。有些字符串的翻译是有规律可行的,遵循相应的模板模式,解析字符串,可以实现机器翻译的效果。

请看帐套数据库表的设计ADCOMP

CREATE TABLE dbo.ADCOMP(RECNUM           DECIMAL (28) IDENTITY NOT NULL,COMPANY_CODE     NVARCHAR (10) CONSTRAINT DF__ADCOMP__COMPANY___0E391C95 DEFAULT ('') NOT NULL,COMPANY_NAME     NVARCHAR (50) CONSTRAINT DF__ADCOMP__COMPANY___0F2D40CE DEFAULT ('') NOT NULL,SUSPENDED        NVARCHAR (1) NULL,DB_SERVER        NVARCHAR (128) NULL,DB_DATABASE      NVARCHAR (128) NULL,DB_USER          NVARCHAR (128) NULL,DB_PASSWORD      NVARCHAR (128) NULL,DB_DRIVER        NVARCHAR (20) NULL,DB_REPT_DRIVER   NVARCHAR (20) NULL,CREATED_DATE     DATETIME NULL,CREATED_BY       NVARCHAR (10) NULL,REVISED_DATE     DATETIME NULL,REVISED_BY       NVARCHAR (10) NULL)
 

在界面上,它的实现方法,如下图所示

image

数据表ADCOMP的COMPANY_CODE在界面上翻译成Company Code,字段COMPANY_NAME翻译成Company Name,这种翻译方法有规律可遵循,可以实现由程序自动翻译。

下面列举几种常见的情况,分析如何实现程序解析并翻译。

模式1  下划线分割单词  COMPANY_CODE

这种模式的特点是有含义的单词,全部以下划线分隔,有含义的单词可以是英语中的名词,也可以是自造的缩写,词与词之间用下划线分隔。下面再举几个例子分析

ITEM_NO –> Item No 物料编号, NO是Number的缩小

ITEM_CODE –> Item Code 物料编码

MAIN_LOC –> Main Loc 物料主档中的设定物料的主仓库

FG_LOC –>  Fg Loc 车间控制中的参数,设定完工成品默认进仓的仓库 FG是对成品Finished Good的缩写

处理算法:先去掉下划线,以空白符号隔开,再把首字母大小,其余字母小写

 

模式2   多余的前缀去除 tbl_User

我一直觉得,这种命名方法有待于商议,给数据库对象加前缀。比如给所有的表加tbl,所有的视图加vw-,存储过程加sp_, 触发器加tr_,这样,形成了一套很有规律的数据库命名方案。

tbl_User  用户数据库    sp_ItemNoWhereUsed 存储过程,查询物料编号在哪些物料清单中用到

vw_User  用户视图      tr_UserNew  当增加新用户时,自动写入创建当前的用户的时间和IP地址

这种方法好处理,去掉固定的前缀即可。tbl_User变成User,然后可以自动翻译成用户。

这也产生了一个问题,经过去除前缀处理,上面有2个数据库对象均是User(tbl_Ueer,vw_User) ,这2个最终都被翻译成了User,在有些场合,这会造成语意不明。举例说明

Style 在服装生产行业,常用来指款式。一套衣服,有2个系列,3种款式,4种颜色,这样生产一个系列的衣服,就会产生2*3*4=24,一共有24件衣服。

在程序中,为了让窗体看起来美观,经常加一些漂亮的皮肤,比如Office 2007的蓝色,Office 2010的银色,形容程序的外观,也是用的Style这个词。

于是,同一个词语有2个地方用到,但是它们的含义完全不同。争对这种情况,为了实现翻译自动化,我的处理方法是把后一种情况(界面外观)的用词改成Application Style,这样可以与前一种衣服的Style区分开来。

 

模式3  程序类型定义,数据库表对应的内存对象 UserEntity

LLBL Gen 会给生成的表加上Entity后缀,以表示它是数据库的内存对象表示,这样,我们自己给对象定义名称时,绕开这个规定,避免给对象名加Entity后缀。

image

这个界面,是采用翻译自动化实现的。Source Table Name是数据库中的表定义,比如UserGroup表的定义如下

CREATE TABLE dbo.UserGroup(UserGroup    NVARCHAR (10) DEFAULT ('') NOT NULL,Description  NVARCHAR (30) DEFAULT ('') NOT NULL,Suspended    NVARCHAR (1) NULL,CreatedDate  DATETIME NULL,CreatedBy    NVARCHAR (10) NULL,RevisedDate  DATETIME NULL,RevisedBy    NVARCHAR (10) NULL,OwnerBranch  NVARCHAR (4) NULL,SourchBranch NVARCHAR (4) NULL,Email        NVARCHAR (100) NULL,CONSTRAINT PK_UserGroup PRIMARY KEY (UserGroup))
GO

定义表之后,借助于实体生成工具,或是LLBL Gen代码生成器,生成了实体对象UserGroupEntity。

我取数据表名时,只需要把Entity去掉,就可以知道这个实体对象对应的表名。Table Name这一列是方便于阅读的,根据表的定义自动生成,没有实际的存储在数据库。

 

4  数据表关系,实体对象关系(一对一,一对多)的命名 BranchDetails

这个灵感来源于LLBL Gen Pro的设计器配置属性,请看下图

image

这几个部分节专门是设置命名规则的,Strip patterns剔除模式,Name pattern命名方法。

来看看关系的命名,文档中是这样写的

{$StartEntityName} for the name of the start entity, {$EndEntityName} for the name of the end entity, $P or $S suffix to entity name macros to pluralize or singularize them

singularize ['siŋgjulәraiz]

vt. 使显著, 使成为唯一, 使成为单数

pluralize ['pluәrәlaiz]

vt. 使成复数

vi. 兼职, 成复数形式

$P 复数表达形式,比如下图中的BranchDetail在关系中表示成了复数形式BranchDetails, 这是默认的生成方法,不源于这里的设置,也可以修改。

image

 

这其实也解释了系统中,实现一种通用的命名方案的好处,统一的命名方案,有利于界面翻译处理,也可以让程序望文生义,简单直观。

转载于:https://www.cnblogs.com/JamesLi2015/archive/2013/05/17/3083148.html

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

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

相关文章

参数详解 复制进程_如何优化PostgreSQL逻辑复制

How to Optimize PostgreSQL Logical Replication逻辑复制( Logical Replication )或 Pglogical 是表级别的复制。两者都是基于 WAL 的复制机制,允许在两个实例之间复制指定表的WAL 。这两个看起来让人迷惑,到底有什么区别呢? Logical Replic…

Android Studio使用说明

声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。 凌晨的Google I/O大会上,宣布了Android Studio,引起了现场开发者的一片欢呼。那么&#x…

有些窗口底部被任务栏挡住了_开始使用 Tint2 吧,一款 Linux 中的开源任务栏

Tint2 是我们在开源工具系列中的第 14 个工具,它将在 2019 年提高你的工作效率,能在任何窗口管理器中提供一致的用户体验。-- Kevin Sonney每年年初似乎都有疯狂的冲动想提高工作效率。新年的决心,渴望开启新的一年,当然&#xff…

从jHiccup开始

写完“如何在生产中检测和诊断慢速代码”一文后,我受到读者的鼓励,尝试从Azul系统尝试jHiccup 。 去年,我参加了jHiccup的创建者Gil Tene的演讲,探讨了测量延迟的正确方法,其中,他向我们介绍了jHiccup。 它…

华为内部面试题库---(6)

1.在SMP体系结构中,中断亲和性是指将一个或者多个中断绑定到特定CPU core上运行,下列说法错误的是:A.每个硬件设备都会在/proc/irq下有个中断号命令的目录来标志中断亲和性B.IRQ#目录下smp_affinity文件,通过设置CPU位掩码&#x…

基元需要走吗?

我目前正在使用JSF作为视图技术,使用JPA作为持久层的企业应用程序。 它可能是支持bean或服务方法中的某种东西,但令我震惊:是否有充分的理由在企业应用程序中使用原语? 当我开始围绕J2SE 1.2使用Java进行编程(或者是J…

输入参数_太实用!输入参数1秒算出功率,这款计算工具又快又准

随着互联网红利的不断加深,到了后期,不断地各种工具开始涌现,方便了很多用户,填补了市场上的很多空白,有生活娱乐类、提高效率类、垂直专业类、系统工具类等等。工业行业作为各行各业的大头,机械化、智能化…

如何编写NetBeans插件

是否想在NetBeans IDE中添加功能或自动执行某些操作? 跟随我们编写您的第一个NetBeans插件。 让我们超越简单的工具栏示例 ,创建一个可以自动更新的插件。 该代码基于NetBeans的WakaTime插件 。 我们的示例插件将仅打印Hello World语句,并在…

Spring Batch教程–最终指南

这是Spring批处理教程,它是Spring框架的一部分。 Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管…

箱式图 添加异常值平均值_什么是脏数据?怎样用箱形图分析异常值?终于有人讲明白了...

导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础。没有可信的数据,数据挖掘构建的模型将是空中楼阁。数据质量分析的主要任务是检查原始数据中是否存在脏数据…

窗口程序ImageView(仿QQ图片查看器)

近期一直在学习窗口程序之类的问题,下午正好有机会和大家讨论一下. 程序运行截图: 应用方法: 1、直接把图像文件拖到图标上表现 2、通过命令行方式,示例:ImageView.exe "带全路径的图像文件名称" 3、打开ImageView.exe&…

USACO3.15stamps(dp)

对dp很无奈。。枚举所有可能达到的值 dp[i]表示到达i值所用最少的邮票 1 /*2 ID: shangca23 LANG: C4 TASK: stamps5 */6 #include <iostream>7 #include<cstdio>8 #include<cstring>9 #include<stdlib.h> 10 #include<algorithm> …

基于价值的类

在Java 8中&#xff0c;某些类在Javadoc中有一个小注释&#xff0c;说明它们是基于值的类 。 其中包括简短说明的链接&#xff0c;以及有关不使用它们的限制。 这很容易被忽略&#xff0c;如果这样做&#xff0c;则可能会在将来的Java版本中以微妙的方式破坏代码。 为了避免这种…

REST API的演变

每个开发人员都以某种方式接触到API 。 要么为一家大公司集成一个主要系统&#xff0c;或者使用最新的图形库生成一些精美的图表&#xff0c;要么直接与他喜欢的编程语言进行交互。 事实是&#xff0c;API无处不在&#xff01; 它们实际上代表了当今Internet的基本构建块&#…

Oracle MAF中的LOV

我们都喜欢最强大的ADF功能值列表之一。 使用它们&#xff0c;我们可以在ADF应用程序中声明性地轻松构建非常复杂的功能。 一件好事是&#xff0c;我们在Oracle MAF中也有类似的方法。 在ADF BC中&#xff0c;我们在业务服务级别&#xff08;基本上在实体或VO级别&#xff09;定…

怎么移动矩形选框工具选中的东西_ps矩形选框工具怎么用,你值得一看的技巧...

PS是一款非常好用的图片制作软件&#xff0c;我们可以使用矩形选框工具&#xff0c;选择自己需要的区域进行操作&#xff0c;下面小编就教大家ps矩形选框工具怎么用&#xff0c;希望可以帮助到大家。操作方法01首先我们打开PS进入到主界面&#xff0c;如图所示。02之后我们需要…

stream 过滤俩个字段_Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合...

点波关注不迷路&#xff0c;一键三连好运连连&#xff01;先贴上几个案例&#xff0c;水平高超的同学可以挑战一下&#xff1a;从员工集合中筛选出salary大于8000的员工&#xff0c;并放置到新的集合里。统计员工的最高薪资、平均薪资、薪资之和。将员工按薪资从高到低排序&…

一个JSF清单示例

这是使用JSF 2.0&#xff08;JavaServer Faces&#xff09;构建的示例列表应用程序。 该应用程序是待办事项列表。 该应用程序具有添加&#xff0c;编辑或删除列表中项目的功能。 待办事项具有名称和描述属性。 完成的应用程序的JSF页面具有&#xff1a; 使用h:selectOneList…

hdu 2444(二分图的判断以及求最大匹配)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2444思路&#xff1a;首先要判断能否构成二分图&#xff0c;用bfs对当前点u染色&#xff0c;对u的邻接点v的颜色进行判断&#xff0c;如果为染色&#xff0c;则染色后入队列&#xff0c;否则&#xff0c;判断co…

Delta架构:统一Lambda架构并利用Hadoop / REST中的Storm

最近&#xff0c;一群人要求我详细介绍我为我们的书《分布式实时计算的风暴蓝图》撰写的Druid / Storm集成。 德鲁伊很棒。 风暴很大。 两者一起解决了实时维查询/聚合问题。 实际上&#xff0c;人们正在将其视为主流&#xff0c;将其称为RAD Stack &#xff0c;并添加了“ La…