欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net web页面元素的多语言化(多国语化)实现分享

程序员文章站 2024-03-05 12:07:48
开发的一些系统,经常要求支持多语言(例如日文,英文等),以前大部分做法是创建一个资源文件, 将每一个标签,按钮等标题文字预先用各种语言设定保存好, 在程序中根据选择的语...

开发的一些系统,经常要求支持多语言(例如日文,英文等),以前大部分做法是创建一个资源文件,

将每一个标签,按钮等标题文字预先用各种语言设定保存好,

在程序中根据选择的语言来显示对应文字。

这样做的缺点是如果每次改动或增加一个控件,都需要程序开发人员刻意做多语言对应,

如果用户想要改某些标题的描述,还需要开发人员改动资源文件并替换到程序发布目录。

经过调查实验,最终想了一个办法来较好地对应此问题:

在每一个web页面,设定一个只有*的管理权限才能看到的一个按钮(例如叫“设定”),

来负责画面上各固定标题的设置,只要点击这个按钮,就通过控件遍历的方法来显示该页面上所有希望控制的

控件(比如label,button,gridview,linkbutton等),   将其各种语言的内容显示到一个小页面上,让用户自己设定,

然后保存到db。下次打开时就按照db设定好的内容初期化页面控件的标题。

最终用户可*设定,也无需开发人员不停修改。

画面效果如下:

asp.net web页面元素的多语言化(多国语化)实现分享

点击“设定”

asp.net web页面元素的多语言化(多国语化)实现分享

下面举例,循环设定页面中控件(textbox,dropdownlist等)不可用的代码:

复制代码 代码如下:

public shared sub loopingcontrolsdisabled(byval ocontrol as control)
dim frmctrl as control
dim btn as button
for each frmctrl in ocontrol.controls
if typeof frmctrl is textbox then
directcast(frmctrl, textbox).enabled = false
end if
if typeof frmctrl is dropdownlist then
directcast(frmctrl, dropdownlist).enabled = false
end if
if typeof frmctrl is checkbox then
directcast(frmctrl, checkbox).enabled = false
end if
if typeof frmctrl is radiobutton then
directcast(frmctrl, radiobutton).enabled = false
end if
if typeof frmctrl is fileupload then
directcast(frmctrl, fileupload).enabled = false
end if
if typeof frmctrl is button then
btn = directcast(frmctrl, button)
'if btn.text.equals("关闭") orelse btn.id.equals("btnclose") then
if btn.id.equals("btnclose") then
'仅关闭按钮可用
btn.enabled = true
else
btn.enabled = false
end if
end if
if frmctrl.hascontrols then
loopingcontrolsdisabled(frmctrl)
end if
next
end sub