原来做的是在英文版的vb下编译,然后将程序中的汉字都单独放到ini中,根据选择的版本来调用汉字,感觉巨麻烦,有没有更好的方法来搞这个东西的?

解决方案 »

  1.   

    oracle做的ERP多语言版本都是从数据库里面读不同语言的
      

  2.   

    ini、xml等都是首选。
    或者可以做成dll资源库的方式。
      

  3.   

    Private Declare Function LCMapString Lib "kernel32" Alias "LCMapStringA" (ByVal Locale As Long, ByVal dwMapFlags As Long, ByVal lpSrcStr As String, ByVal cchSrc As Long, ByVal lpDestStr As String, ByVal cchDest As Long) As Long
    Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long'简转繁
    Public Function JToF(ByVal Str As String) As String
        Dim STlen As Long
        Dim STf As String
        STlen = lstrlen(Str)
        STf = Space(STlen)
        LCMapString &H804, &H4000000, Str, STlen, STf, STlen
        JToF = STf
    End Function'繁转简
    Public Function FToJ(ByVal Str As String) As String
        Dim STlen As Long
        Dim STj As String
        STlen = lstrlen(Str)
        STj = Space(STlen)
        LCMapString &H804, &H2000000, Str, STlen, STj, STlen
        FToJ = STj
    End Function
      

  4.   

    上面的两个api能不能说详细些,查半天不知道干吗的
      

  5.   

    http://tbhacker.com/online/API.txt
    到这里查看
      

  6.   

    理论上开发本地化版本的 Visual Basic 应用程序只须修改数据块。代码块对所有的区域都是相同的。把数据块和代码块结合在一起就构成了本地化版本的应用程序。成功地设计国际应用程序的关键在于分离数据块和代码块,并使 Visual Basic 应用程序能够准确地读取数据而不用考虑区域。尽管要麻烦一些,但在开发 Visual Basic 应用程序时还是应该把所有用户界面的字符串资源放到单独的文件而不是代码中,该文件可以在运行时加载。这就是资源文件 (.res)。它包含了所有本地化的字符串、位图和图标。关于资源文件的详细信息,请参阅本章后面的“使用本地化资源文件”。开发不同语言版本的应用程序时,本地化小组应把精力只花在资源文件上。这样做有以下优点: 高效:由于代码块是相同的,因此开发新的国际应用程序只需创建新的资源文件。这样可以很顺利地开发多国语言版本的 Visual Basic 应用程序。
    安全:无论在内部或利用外部公司本地化应用程序,都不用修改源代码。这样做还可以减少花在国际版测试上的精力。
    更好的本地化:由于所有的字符串资源都在一个文件中,因此可以提高本地化工作的效率并防止遗漏。 
    下表列出了在设计 Visual Basic 应用程序时要考虑的一些因素。因素 项目 
    语言 用户界面(菜单、对话框及错误信息)中的字符串 
    打印的文档和联机的文档
     
    与区域有关的设置 日期/时间格式(分隔符、年月日的顺序) 
    数字格式(小数点和千分位符)货币格式(符号和格式)排序顺序和字符串比较
     
    在大多数方式下,发布本地化的 ActiveX 控件与发布原始版本的控件没有什么不同。不过,如果该控件发行了新版本,并随另一个应用程序在Web 上发布,就可能会产生问题。随 Visual Basic 一起提供的 ActiveX 控件已自动被翻译、或本地化为与您的 Visual Basic的语言版相对应的语言。例如,Visual Basic 的日语版中的控件用的是日语,并可用于以该语言发布。当发布这些控件时,打包和展开向导必须确定需要随这些文件一起包装的文件。注意 本主题只适用于随 Visual Basic 一起发布的 ActiveX 控件。它不适用于使用 Visual Basic 创建的用户控件,除非这些控件包含了 Visual Basic ActiveX 控件。Visual Basic 的本地化 ActiveX 控件包括两部分: .控件的 .ocx 文件,该文件是控件的代码块。Visual Basic 的各种语言版本使用的是同一个 .ocx 文件。
    附属的 DLL 文件,该文件包含了该控件的本地化字符串,是控件的数据块。不同版本的附属 DLL 根据您所购买的Visual Basic 语言版本而有所不同。 
    当包装一个包含本地化的Visual Basic ActiveX 控件的应用程序时,打包和展开向导将自动包括正确的附属 DLL。当最终用户下载该应用程序时,这个正确的附属 DLL 就被安装到用户的计算机上。将 Visual Basic 创建的部件本地化,首先把部件中用到的所有文本字符串收集到一个 Windows 资源编译器使用的资源文件(.rc 文件)中。然后翻译这些字符串就可创建该源文件的本地化版本了。在编译部件的每个本地化版本之前,使用资源编译器从适当的源文件创建 Windows 的资源(.res 文件),并把资源文件包含进工程。没有可视界面的部件用这种办法本地化非常容易,因为需要本地化的只有出错消息。“生成和处理错误”的代码部分演示了这种技术。对于显示窗体的部件,本地化过程要复杂一些。需要把窗体和控件的标题放到资源文件里,然后在每个窗体的 Form_Load 事件过程中获取它们。附属 DLL
    在使用多种语言的地区,使用资源文件会有一些问题。不仅要为每一种语言单独编译出部件的一个版本,而且由于它们使用同一个工程名,在任何时候用户的计算机上就只能安装一种语言版本。“建立 ActiveX 控件”中的“控件的本地化”介绍了使用附属 DLL 把字符串翻译成各种语言的技术。附属 DLL 和部件一起使用,不需要重新编译部件就可换入和换出。如果使用基于 LocaleID 的名称转换机制,多个附属 DLLs 可以同时存在于一台计算机上,用户可通过修改系统的 LocaleID 在不同语言之间切换。限制
    不幸的是,代码部件会限制这种方法的使用。和控件部件不同,代码部件不会从客户应用程序接收 LocaleID。代码部件能够做的只是通过 API 调用来获得系统的 LocaleID。进程外代码部件最多也只能做到这样,因为它们必须为多个客户应用程序服务。但对于进程内部件,如果一个对象含有可以被客户应用程序设置的 LocaleID 属性,那么提供这样的对象会给开发人员比较好的选项。属性设置后,部件就可以从适当的附属 DLL 中加载文本字符串。
      

  7.   

    Visual Basic 通过使用资源文件有效地把本地化信息从代码中分离出来。注意 工程中只能有一个资源文件,如果试图添加一个以上的资源文件 Visual Basic 将产生一个错误信息。把字符串保存在资源文件中的优点
    编写代码时,可以调用 LoadResString、LoadResPicture 和 LoadResData 函数代替对文字、图象和数据的引用。把这些元素存储在资源文件中有两大好处: 提高性能和增加空间,这是因为字符串、位图、图标和数据可以不必在调用窗体或模块时就全部加载,而可以按需要从资源文件中加载。
    把需要翻译的资源单独放在一个资源文件中,因此没有必要访问源代码或重新编译应用程序。 
    要创建资源文件,请按照以下步骤执行: 从“工程”菜单中选择“新资源文件”。 
    注意   该命令只有在资源编辑器外接程序加载的情况下才能使用。要加载资源管理器外接程序,请选择“外接程序”菜单中的“外接程序管理器”。在“外接程序管理器”对话框中,选择“VB6 资源编辑器”并复选“加载/卸载”。在“打开一个资源文件”对话框中,为资源文件输入一个名称。资源文件名称将被添加到“工程资源管理器”的“相关文档”节点。 
    Visual Basic 把具有 .res 扩展名的文件识别为资源文件。如果资源文件不具有正确的扩展名,Visual Basic 将不会加载它。相反地,任何具有 .res 扩展名的文件被加入到工程时都会被 Visual Basic 当作资源文件处理,如果该文件不具有标准的资源文件格式,Visual Basic 将在第一次使用资源文件支持函数(LoadResString、LoadResPicture 和 LoadResData)或试图编译成 .exe 文件时产生错误信息。试图添加 16 位的资源文件到工程中也会产生同样的错误信息。资源文件被添加到工程后,.res 文件将出现在“工程”窗口中。与窗体或模块不同,在 Visual Basic 中不能查看 .res 文件。该文件是标准的资源文件,可由 Microsoft Visual C++ 和其它大部分的 Windows 开发工具创建或使用。一旦在“文件”菜单中选中“生成 projectname.exe”一项,Visual Basic 将把该文件中的所有资源编译到 .exe 文件中作为 Windows 的资源。在编译 .exe 文件之前和之后,.res 文件都是标准的 Windows 资源文件,这意味着任何标准的 Windows 资源编辑器都可以加载该文件。要编辑资源文件,请按照以下步骤执行: 从“工具”菜单中选择“资源编辑器”。 
    注意   该命令仅在资源编辑器外接程序加载的情况下才能使用。要加载资源编辑器外接程序,请从“外接程序”菜单中选择“外接程序管理器”。在“外接程序管理器”对话框中,选择“VB6 资源编辑器”并复选“加载/卸载”框。从“资源编辑器工具栏”中选择一个按钮来编辑一个现存资源文件或添加一个新的。
      

  8.   

    LCMapString   映像字符串
    lstrlen       返回字符串中字符数
      

  9.   

    昨天老板有个新鲜提议,说能不能改的时候直接用2进制读exe程序文件的汉字来改,我说肯定不行,如果行的话反编译岂不是易如反掌,还叫我想想,想你个头,要不是你是老板,我都懒的理你.
      

  10.   

    也不尽然,如果在exe中使用了资源文件作为语言管理的话,你老板的想法就可行了。反之亦然。
      

  11.   

    看样子用资源文件是比较流行的了,用ini的时候感觉总是剥离开vb了一样,要单独维护ini,我估计资源文件也是一样的,唉,啥时候把再出个秦始皇来个焚书坑儒,把全世界都统一估计就不会有这种问题了,不过到时候我要是属于被坑的就惨了.
      

  12.   

    刚刚建了下资源文件,思路感觉跟文本差不多啊,只不过有内部调用的函数比较方便一点,而且比调ini简单多了,但是现在我是想将现有的程序搞成繁体的,天那,要我重新写判断代码,让我死了吧,不卖了,不卖了,香港的生意不做了.谁要卖到香港我跟谁急...
      

  13.   

    建立dll,其中包含资源文件。
    每个dll对应不同的语言版本,这样灵活性比较大。
    dll就相当与语言包了,方便迁移。
      

  14.   

    根據zyl910(910:分儿,我又来了!)的指點
    我把他的資料整理後做成了一個簡體工程轉換為繁體工程的工具
    只要選擇某一文件夾就能把其下的(包括子文件夾)的諸如XLS、TXT、FRM、CTL、CLS等文件中的簡體轉為繁體
      

  15.   

    楼上的这么牛,工具给份我看下啦,是不是我把我的frm放到某一文件夹下,这个frm中的所有简体就变繁体啊,晕死了,感觉人有多大胆,地有多大产的意思...
      

  16.   

    呵呵
    我是沒那麼牛的,早就說明了那是整理了一下zyl910(910:分儿,我又来了!)的資料
    留份EMAIL給你寄來