想问一下pb怎样支持国际化语言,大型的mis程序怎样实现多语言?

derris 2006-01-19 11:05:54
pb有没有resource类的可以支持的呢?
...全文
487 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
baffling 2006-03-13
  • 打赏
  • 举报
回复
gz
hangzhou6274 2006-03-03
  • 打赏
  • 举报
回复
都是牛人,什么东西都搞得这么透彻,我要拜师学习
rightyeah 2006-03-01
  • 打赏
  • 举报
回复
没错,我就是要做100次,因为有100个不同的窗口。
每个窗口的界面都是独立的,需要一个单独的界面资源(xml文档的一部分)来描述。而对于窗口中的控件,我就根本没有任何命名上的要求。比如按钮,可以用cb_ok,也可以偷懒,就用cb_1,还有其他控件,都可以直接用dw_1,sle_1这样的名字。而且我这样的做法,不但可以定义控件上的文本,还可以定义控件的位置、尺寸。
而楼上的做法,名字叫cb_ok的按钮,他的文本就只能是‘确定’,而不能是其他的,在灵活性上就显的麻烦了点。每用一个控件,先得去查这样一个列表,看看是不是有现成的可以用,如果没有,就要再定义一个,还要给一个合适的名字,还得注意是不是这个名字被用掉了。
我的做法是以对象为单位的,一个窗口对象上可以有很多控件,我把这个窗口和它的控件的界面资源集中到一起了。而楼上的做法,则是以控件为单位的,定义了一个控件名称-控件文本的对照罢了。我的做法,是定义了一个class,嵌入到每一个自定义的对象里面,而楼上的做法,则是要求所有的用户界面都必须使用自定义的控件,而不能使用系统提供的控件。
rightyeah 2006-02-24
  • 打赏
  • 举报
回复
相比wguxin的解决方案,我的方法的好处在于
1、不需要为每一个控件定义派生类,只需要在自定义application,window,userobject的时候插入一个对象就可以了。
2、每一个自定义的对象(指pbl文件中可以看到的对象),都对应了xml文档中的一个项目。象w_main,w_main2,m_main,m_main2,每一个都有相对的pb对象的。这样同一个userobject用在多个窗口的话,相应的xml文档只需要写一次。
3、可以处理多次继承的类。这里的w_main2是从w_main继承的,m_main2是从m_main继承的。实际使用的时候,application调用w_main2,w_main2调用m_main2。实现语言切换的时候,先做基类的切换,再做派生类的切换。这样对于从一个基类继承出来的多个子类,不必为共同的部分内容反复写xml文档了。
4、实时切换。由于语言切换的代码被集中到了一个class上,使得用户选择不同语言后,立即切换到选中的语言的做法成为可能。
rightyeah 2006-02-24
  • 打赏
  • 举报
回复
这两天做了一个class,用来实现多语言转换的。只要在每个window/userobject里面插入这个不可见的类,在application里面做适当的初始化,就可以实现多语言的切换。
我的xml文档是这样的:
<?xml version="1.0" encoding="gb2312"?>
<m-lang>
<lang type="zh">
<w_main title="标题">
<cb_1 text="按钮"/>
</w_main>
<w_main2 title="标题-继承的">
<cb_2 text="第二个按钮"/>
</w_main2>
<m_main>
<m_file text="(&F)文件">
<m_exit text="(&X)退出 Alt+F4"/>
</m_file>
<m_edit text="(&E)编辑"/>
<m_language text="语言">
<m_zh text="汉语"/>
<m_en text="English"/>
</m_language>
</m_main>
<m_main2>
<m_edit>
<m_copy text="复制"/>
<m_paste text="粘贴"/>
</m_edit>
</m_main2>
</lang>
<lang type="en">
<w_main title="title">
<cb_1 text="button"/>
</w_main>
<w_main2 title="title-inherb">
<cb_2 text="2nd button"/>
</w_main2>
<m_main>
<m_file text="&File">
<m_exit text="E&xit Alt+F4"/>
</m_file>
<m_edit text="&Edit"/>
<m_language text="Language">
<m_zh text="汉语"/>
<m_en text="English"/>
</m_language>
</m_main>
<m_main2>
<m_edit>
<m_copy text="Copy"/>
<m_paste text="Paste"/>
</m_edit>
</m_main2>
</lang>
</m-lang>
wguxin 2006-02-24
  • 打赏
  • 举报
回复
to rightyeah(众妙之门)

cb_ok 是 "确定" 那么"同意" 就不能是 "cb_ok" 了, "同意" 要有令外的名字, 文字与控件的名称是一一对应的.

你的方法和我的不一样吗? 只不过你是在打开窗口的时候做的,我是在控件生成的时候做的.
有个问题要问你了,如果程序中有100个窗口 每个窗口上的按钮都相同,比如都是 "确定",我只要
<root>
<lang type="zh"><cb_ok text="确认"/><cb_cancel text="取消"/></lang>
<lang type="en"><cb_ok text="ok"/><cb_cancel text="cancel"/></lang>
</root>
就行了,你却要
<?xml version="1.0" encoding="gb2312"?>
<m-lang>
<lang type="zh">
<w_main title="标题">
<cb_1 text="按钮"/>
</w_main>
<w_main2 title="标题-继承的">
<cb_2 text="第二个按钮"/>
</w_main2>
<m_main>
<m_file text="(&F)文件">
<m_exit text="(&X)退出 Alt+F4"/>
</m_file>
<m_edit text="(&E)编辑"/>
<m_language text="语言">
<m_zh text="汉语"/>
<m_en text="English"/>
</m_language>
</m_main>
<m_main2>
<m_edit>
<m_copy text="复制"/>
<m_paste text="粘贴"/>
</m_edit>
</m_main2>
......
100次
</lang>
<lang type="en">
<w_main title="title">
<cb_1 text="button"/>
</w_main>
<w_main2 title="title-inherb">
<cb_2 text="2nd button"/>
</w_main2>
<m_main>
<m_file text="&File">
<m_exit text="E&xit Alt+F4"/>
</m_file>
<m_edit text="&Edit"/>
<m_language text="Language">
<m_zh text="汉语"/>
<m_en text="English"/>
</m_language>
</m_main>
<m_main2>
<m_edit>
<m_copy text="Copy"/>
<m_paste text="Paste"/>
</m_edit>
</m_main2>
......
100次

</lang>
</m-lang>
PowerDesigner 2006-02-23
  • 打赏
  • 举报
回复
维护表的关键字应该是:窗口名-》classname,因为在同一窗口不可能有两个同名的控件名,你可以参考pfc的安全服务
rightyeah 2006-02-23
  • 打赏
  • 举报
回复
我想楼上的不明白我的意思。按照wguxin的方法,他用xml保存对象名称与显示文本的对照,可能会象这样:
<root>
<lang type="zh"><cb_ok text="确认"/><cb_cancel text="取消"/></lang>
<lang type="en"><cb_ok text="ok"/><cb_cancel text="cancel"/></lang>
</root>

然后根据对象的classname()来查找对照表,如果按钮的名字是cb_ok,语言是zh的,就会返回一个"确认"。而我的问题是,如果另外一个对象,也叫cb_ok,这么查一下表,也还是会返回"确认",虽然这根本不是我想要的。

rightyeah 2006-02-22
  • 打赏
  • 举报
回复
那我就有一个疑问了。同样一个按钮,cb_ok,在这个窗口上也有,在那个窗口上也有,区别是这里用"确定",那里却要用“同意”。不说按钮,statictext用的更多,都是st_1,st_2的,而且st还是enabled=false的,它的事件不会运行。我的问题是:对于这样同名的控件,怎么区分?
wguxin 2006-02-22
  • 打赏
  • 举报
回复
所有的控件都用自己的对象继承过来,在控件初始化使自动完成语言设置,userobject 和tab page 也是一样的

例如: 按钮 "cb_ok" 在他的"constructor"事件中调用自定义函数"of_constructor"
of_constructor(lng_id,this.classname()) //lng_id 为全局的语言标识(1 中文,2英文...),然后所有的按钮都由此继承 使用时,只要给按钮相应的名字 即可

XML 文件中 "cb_ok" 对应 按钮上文字

其他控件基本相同,数据窗口麻烦点,需要根据列名来确定,提示信息的"messagebox" 要用自己的代替,提示信息可以使用自己定义的编号,根据编号在XML中找出相应的文字
rightyeah 2006-02-22
  • 打赏
  • 举报
回复
希望你能给点资料,给我参考一下。谢。
rightyeah_tang@hotmail.com
rightyeah 2006-02-22
  • 打赏
  • 举报
回复
to wguxin:
我也考虑过你说的方法,为不同的语言定义不同的xml资源,然后在窗口上对所有的文本设置值。
普通控件很好处理,简单赋值就可以了。我想问的是:
1、datawindow object怎么处理,动态更换的datawindow object又该怎么处理。我个人以为,还是由调用者来做,也就是说在窗口open的时候直接调用一个关于dw界面的函数来处理,而动态更换的dw,则在更换后立即调用这个界面函数。
2、userobject怎么处理。是由uo自己来处理,还是直接由窗口对象来处理?前者可以吧复杂问题分解到各个自定义的对象,但是每个自定义的uo,都必须有相关的界面处理代码。后者把代码都集中到窗口上了,不过在处理uo,以及uo嵌套uo等情况的时候,就显得有点力不从心了。
3、tab page怎么处理。tab page虽然也是userobject,但是它和自定义的uo毕竟有所不同
4、菜单,我个人倾向于让窗口来处理。
renwanly 2006-02-22
  • 打赏
  • 举报
回复
to rightyeah(众妙之门):
看一下PFC的安全扫描服务中是如何运用扫描来完成的,你可以知道如何实现不同按钮在不同窗口中的text
renwanly 2006-02-16
  • 打赏
  • 举报
回复
1.translation toolkit
优点:PB自带.方便实用,
缺点:需要针对不同语言发布不同版本
2.配置文件,
缺点:对程序开发过程控制要求较高,需要将菜单,标签,提示,数据窗口,等所有有文字的地方都要做"活",以便根据用户选择语言进行动态变化,程序效率较低
优点:一个版本就可真正"国际化"
可根据你的要求进行选择:D
wguxin 2006-02-16
  • 打赏
  • 举报
回复
我们有做过,用XML,每种语言一个XML,界面上所有的文字信息都在XML文件中.包括文字,字体,提示信息
WorldMobile 2006-02-15
  • 打赏
  • 举报
回复
translation toolkit
rightyeah 2006-02-15
  • 打赏
  • 举报
回复
up一下,看看讨论结果
li_d_s 2006-02-15
  • 打赏
  • 举报
回复
不行就用配置文件,写在祖先窗口里面去,open的时候用窗口名做section, 控件名做key取配置文件里面的内容作为text
NORTHCHERT 2006-02-14
  • 打赏
  • 举报
回复
PB8.0以上 有个translation toolkit 工具你可以来试着做多语言版本
YewPu 2006-01-23
  • 打赏
  • 举报
回复
在软件上加上设定字体等..这就行了.也就是在程序入口让用户选择字体...等,哪程序就可以支持任何中文的语言,,,如果有英文等,哪一就要加几种语言版本.
加载更多回复(5)
怎样成为一个程序高手呢?http://www.XiaoHui.com 2000-07-09 [原创]

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧