日期:2011-12-25  浏览次数:20412 次

专为VB制做的多语言软件开发工具,可以轻松完成对可视界面的多语言化,您只需要制做语言包母板后翻译复制该母板即可.点这里下载示例工程.


界面介绍如下:

启动图标:
点这里将启动该程序.


程序将向您的代码中添加以下代码,以便您访问语言包:

API:
  Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long 
   由于语言包是使用INI格式保存的,程序添加了该API函数,如果该API已经存在,将不添加.


在窗体的 Load 事件中添加调用界面语言加载子程序的代码.
Private Sub Form_Load()
Call frmMain.CoderHelper_VBMltLug_InitfrmMain(App.Path + IIf(Len(App.Path) = 3, "", "\") + App.EXEName + ".exe.lag") 'CoderHelper专用代码行请不要删除!
  '括号内的过程是计算语言包文件的文件路径和文件名称,文件名称是以可执行文件的路径为准,其文件名后加".lag"为扩展名的文件.要翻译该文件,请复制后打开使用文本工具翻译.在后续版本中,将提供部分翻译和转换方面的工具.


添加界面初始化程序.该程序的参数为一个有效的语言包文件的完整路径.
Public Sub CoderHelper_VBMltLug_InitfrmMain(lngFileName As String)
'MysticBoy 提醒您:由于一些控件的属性可能是只读的或在运行时是不可用的,建议调试以下代码.
Me.CmdDown.Caption = ch_GetKeyVal(lngFileName, "frmMain.CmdDown", "Caption", "V")
{......}
End Sub
 由于部分控件的部分属性在运行时是只读或是不可用的,建议在你编译工程之前,请调试该段代码,


该函数将用于访问语言包文件,读取指定字段中指定键的值,如果语言包无效或没有该值将使用默认值,即 DefValue参数指定值.
Public Function ch_GetKeyVal(ByVal FileName As String, ByVal Section As String, ByVal Key As String, Optional DefValue As String)
Dim RetVal As String, Worked As Integer
If Dir(FileName) <> "" And FileName <> "" Then
RetVal = String$(255, 0)
Worked = GetPrivateProfileString(Section, Key, DefValue, RetVal, Len(RetVal), FileName) If Worked = 0 Then
ch_GetKeyVal = DefValue
Else
ch_GetKeyVal = Left(RetVal, InStr(RetVal, Chr(0)) - 1)
End If
Else
ch_GetKeyVal = DefValue
End If
End Function


 该函数用于读取指定语言包内的字符串.字符串可能包括代码中的提示内容或着窗体的标题等文本.
Public Function ch_GetStr(Key As String, Optional DefValue As String) '
'请使用此函数读取字符串信息'如 i = MsgBox(Prompt:=ch_GetStr("SaveFile", "文件是否保存?"), Title:=ch_GetStr("SaveFile1", "文件未保存"), Buttons:=vbYesNo) '
ch_GetStr = ch_GetKeyVal(App.Path + IIf(Len(App.Path) = 3, "", "\") + App.EXEName + ".exe.lag", "Strings", Key, DefValue)
End Function
  '如果语言包你另有安排,请改写这段代码.


建议添加代码:
示例工程中,我们使用了这样的代码加载语言,首先把翻译好的语言包文件放置在资源文件中.然后使用以下直径读取资源保存到CoderHelper默认的语言包文件完整路径名称的文件.然后调用加载程序来加载语言.
Private Sub mEng_Click()
On Error GoTo errh
Dim lagfn As String, fn As Long
Dim ary() As Byte
fn = FreeFile
lagfn = App.Path + IIf(Len(App.Path) = 3, "", "\") + App.EXEName + ".exe.lag"
Open lagfn For Binary As #fn
ary = LoadResData(103, "lag") 'lag 为资源类型,103为当前语言包的资源代码.
Put #fn, , ary
Close #fn
Call frmMain.CoderHelper_VBMltLug_InitfrmMain(App.Path + IIf(Len(App.Path) = 3, "", "\") + App.EXEName + ".exe.lag")'加载语言.
errh:
If Err.Number <> 0 Then
MsgBox Err.Description, vbInformation
End If
End Sub
'多种语言放置在资源中.将方便您的访问.而加载不同语言,使用此建议代码,仅仅需要改动的是 ary = LoadResData(103, "lag"),您只需要改动资源ID号即可,多语言,建议最好使用控件数组.
Private Sub munLag(Index as Integer )
[...]
ary=LoadResData(100+Index,"lag")
[...]
End Sub
这是MysticBoy所建议的方式..

注意:在您所写的代码行中不要带"'CoderHelper专用代码行请不要删除!"这样的内容.否则.在重新生成代码时CoderHelper 将认为是CoderHelper 上次工作时添加的代码.在插入新代码前将删除.


此工具为CoderHelper正式发布的组件,因此产品是需要注册的.不注册的情况下.将和其它CoderHelper高级组件使用频率共同计数,限制在50次内.

最后祝愿您的软件开发成功.