首页> 中国专利> 不需退出和重新进入即可改变GUI程序的语言的方法

不需退出和重新进入即可改变GUI程序的语言的方法

摘要

本发明提供了不需要退出和重新进入应用程序即可改变GUI应用程序的语言的方法,该方法:a.使用元串而不是使用普通的串。元串包含语言独立的消息说明,并且能用当前语言生成和返回消息的本地版本。b.使用支持国际化的控件替代普通控件。当请求语言切换时:通知元串当前语言已改变;访问全部控件并要求其刷新自己的GUI。这会生成消息的本地版本。

著录项

  • 公开/公告号CN1472647A

    专利类型发明专利

  • 公开/公告日2004-02-04

    原文格式PDF

  • 申请/专利权人 阿尔卡塔尔公司;

    申请/专利号CN03146238.3

  • 发明设计人 马尔科·穆西尼;

    申请日2003-07-04

  • 分类号G06F9/45;

  • 代理机构11247 北京市中咨律师事务所;

  • 代理人杨晓光;于静

  • 地址 法国巴黎

  • 入库时间 2023-12-17 15:05:30

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2008-09-03

    专利权的终止(未缴年费专利权终止)

    专利权的终止(未缴年费专利权终止)

  • 2005-09-21

    授权

    授权

  • 2004-04-14

    实质审查的生效

    实质审查的生效

  • 2004-02-04

    公开

    公开

说明书

技术领域

本发明涉及不需要退出和重新进入应用程序即可改变GUI应用程序的语言的方法。

背景技术

大多数网络管理GUI(图形用户接口)应用程序是“国际化的”-也就是,被设计成可以将网络管理应用程序的消息翻译成特定市场的语言。(此过程被称为“本地化”)。

虽然实现此目的的技术已广为人知并被广泛应用,然而在当前解决方案中,只有一种典型的方法来改变GUI的语言:退出应用程序,选择不同的语言,然后重新启动应用程序。有时甚至必须退出和重新进入终端会话。

然而这经常导致GUI状态的丢失,这种情况是不可接受的,例如,在关键情况下的补救动作正在处理当中时。

虽然在大多数情况下退出和重新进入应用程序是可接受的(因为通常没有其他的选择,现在也确实被接受了),然而存在需要比较频繁地切换GUI语言的场合(例如在大型网络运营中心,那里有使用几种不同语言的职员轮班工作),并且退出和重新进入复杂应用程序和/或会话本身所引起的副作用(尤其是丢失GUI状态,丢失大多数打开窗口的大小和位置,并需要保存工作)确实会很另人烦恼。显然需要一种对运营活动和时间花费影响较少的解决方法。

发明内容

因此,考虑到已知的解决方法不很有效,本发明的主要目的是提供一种不需退出并重新进入应用程序即可改变GUI应用程序的语言的方法。

本发明的基本构思是使用以下策略:

-使用元串(Metastrings)而不是使用普通的串。元串包含语言独立的消息说明,并且能用当前语言生成和返回消息的本地版本。执行此操作的数据保存在外部消息目录文件中。

-使用支持国际化的控件(Widget)替代普通控件(控件是图形构件,例如按钮,下拉列表,菜单,文本框,它们被作为GUI应用程序的基础架构模块来使用)。

-当请求语言切换时:

·通知元串当前语言已改变;

·访问全部控件并要求其刷新自己的GUI。这会生成消息的本地版本。

此方法可以改变GUI的语言而不用退出和重新进入应用程序。除了语言的改变之外,此操作不会通过任何方式影响应用程序的状态。菜单上的一次点击选择就足够了。

不用退出和重新进入就改变正运行的应用程序的语言的能力可用于某些情况,例如,在职员由多种族成员混合组成,轮班工作,并且每天24小时监控系统的情况下。例子可以包括美国西南部环境下切换英语与西班牙语,或者在诸如Sea-Me-We 3的广域跨国网络服务中心内切换几种语言。

这些和更进一步的目的可通过如附加权利要求中所说明的处理方法实现,这些权利要求被作为本发明说明书的一个完整部分。

具体实施方式

通过下面以单纯示例性和非限制性例子给出的详细说明,可以清楚地理解本发明。

改变GUI语言而不需退出和重新进入应用程序的基本策略如下所述。

(1)用语言独立的文本数据产生器(元串)代替GUI中所有文字的文本数据(串)。元串具有不仅存储固定串文字,而且还能使用“当前”语言建立(或者混合)串值的性质。“当前”语言的符号能在运行时间改变。从外部文件检索出被元串用来建立语言相关文本串的语言相关文字的文本数据部件。

(2)用支持动态国际化的子类代替所有的控件类(实现图形接口基本可视构件的代码)。此子类与元串操作而不是串一起工作。因此,新控件的可视说明文字(caption)将会是“当前语言”相关的,并且在“当前”语言改变时将可以在运行时间改变。新控件能与已有的、传统(固定语言)的控件共存,这允许平滑切换到新范型(paradigm)。

(3)在“当前”语言改变时,需要所有控件刷新自身(这将使用新语言执行),可能会申请更多的屏幕空间(例如,因为在新语言中,说明文字较长)。如必要,相应调整GUI的几何尺寸。

更具体地,该方法:

-使用元串(I18NString数据类型)代替常见串(String数据类型)。元串包含语言独立的消息说明,并且能通过当前语言生成和返回消息的本地版本。此操作所需的数据被保存在外部消息目录文件中。

-用支持国际化的控件(使用I18NString作为其说明文字的数据值)代替普通控件(使用String作为其说明文字的数据值)。注意,这同样适用于工具提示(tooltip)文字中,此提示文字通过同样的方式进行国际化。

-当请求语言切换时,

·通知I18NString当前语言已改变;

·访问全部控件并要求其刷新自己的GUI。在这过程中,控件会调用I18NString对象的toString()方法。这会生成消息的本地版本。

消息数据库组织:

所支持的每一个语言都有一个消息目录,名称由基名加后缀组成,后缀包含消息目录文件所应用的语言和地区。

语言切换的集中控制:

-集中类(centralized class)具有指向当前语言的消息目录的索引。

-集中类具有改变语言的方法;当调用此方法时,执行以下操作:

·关闭当前消息目录;

·打开新的消息目录;

·访问控件层次树(hiearchy),并通知所有控件语言已经改变。结果,控件将重新绘制自身;在此过程中控件将查询I18NString的toString()方法以确定它们的说明文字;这会返回新语言的串,并且最终更新整个GUI的语言。

I18NString实现的逻辑结构:

-在构造函数中定义一个标记。此标记用于在外部文件中的查找,此外部文件包含具有标记-消息对形式的消息目录。

-I18NString的toString()方法执行以下操作:

·取得指向当前消息目录的索引;

·查找消息目录中的标记并检索当前语言的串,然后将此串返回。

下面以非限制性的方式给出了GUI应用程序的实施方式的具体例子。

国际化控件类中的典型方法:

/**

*通知此构件国别已经切换,

*所以现在必须执行更新串消息的必要动作。

*/

public void notifyLocaleSwitch(){

if(i18nString!=null)

setText(i18nString.toString());

if(i18nToolTipText!=null)

setToolTipText(i18nToolTipText);

}

/**

*将说明文字设置到指定的I18NString

*/

public void setText(I18NString text){

i18nString=text;

setText(i18nString.to String());

}

典型的集中化的I18N语言切换驱动程序的方法:

/**

*GUI语言切换的驱动程序方法

  */ public void  notifyLocaleSwitchToAllI18NAwareComponentsUnderSpecifiedContainer(Container c)  {  if(c==null)    return;  String s=c.getClass().getName();  if(c instanceof DynamicI18NAware){  DynamicI18NAware d=(DynamicI18NAware)(c);  d.notifyLocaleSwitch();  }  Component[]comps=c.getComponents();  for(int i=0;i<comps.length;i++){  if(comps[i]instanceof Container)  {  notifyLocaleSwitchToAllI18NawareComponentsUnderSpecifiedContainer((Container)(comps[i]));<!-- SIPO <DP n="5"> --><dp n="d5"/>  }  else{  if(comps[i]instanceof DynamicI18NAware){  DynamicI18NAware d=(DynamicI18NAware)(comps[i]);  d.notityLocaleSwitch();  }  }  }  if(c instanceof JMenu){  JMenu jm=(JMenu)(c);  for(int j=0;j<jm.getItemCount();j++){  JMenuItem jmi=jm.getItem(j);  if(jmi!=jm){  if(jmi=null){  }  else{  notifyLocaleSwitchToAllI18NAwareComponentsUnderSpecifiedContainer((Container)(jmi));  }  }  }  }  if(c instanceof JRootPane){   JRootPane jrp=(JRootPane)c;  notifyLocaleSwitchToAllI18NAwareComponentsUnderSpecifiedContainer(jrp.getContentPane());  notifyLocaleSwitchToAllI18NAwareComponentsUnderSpecifiedContainer(jrp.getJMenuBar());  }<!-- SIPO <DP n="6"> --><dp n="d6"/>  }

不再作进一步的具体实施说明,因为本领域的技术人员能由以上所述说明开始实施本发明。

在研究说明书和其中揭示优选实施例的附图后,本领域的技术人员可理解本发明的许多改变、修改、变化以及其他用途和应用。不背离本发明宗旨和范围的所有这些改变、修改、变化以及其他用途和应用,均被认为由本发明所覆盖。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号