我的想法是這樣:
數據庫建立一個表,共兩列,engligh varcha2(100),local varchr2(150),
程序員開發的時候就用英文,程序運行的時候再根據用戶需要再決定是否翻譯,如果翻譯的話就把窗口內的文本全部按該表的對應關系把他翻譯過來,當然local字段的內容就可以是任何其他語言都行,從而實現多語言的支持。望大家幫忙。謝謝

解决方案 »

  1.   

    对于多语言类型我的做法有两个,一个是使用delphi的一个多语言的工具(我没有用过)
    第二个方法是使用dll,即所有的文字都存放到一个dll的字符串表中,然后不同的语言就发布不同的dll
      

  2.   

    Delphi就是这么玩的,不信你看看consts中的声明。
      

  3.   

    呵呵,没有看以前帖子的习惯。不好意思。
    方法如下:
    首先写一个Dll,在Dll中首先声明一个语言的变量全局变量,格式如下:
    var
      LangStrings: Array[??..??] of String =
                           ['Hello',      //  Id=1
                            'Yes',        //  Id=2 
                            'No', ...]
    然后写一个LoadString函数,该函数是一个接口函数,即其他的程序可以通过调用该函数来获得String的数据
    function GetLangStrings(ID: Integer): string;
    begin
      Result:=LangStrings[ID]
    end;然后你在你的Project中,所有的涉及到需要切换的Strings都编一个编号。
    在FromCreate的时候,将需要切换的语句进行调用一下
    比如
    Label1.Caption:=GetLanStrings(??)你再写一个中文的Dll,这样你的程序要发布的时候直接更改一下Dll就可以了。这样还是麻烦了点,你说是吧。因此可以在设计的时候稍微多考虑一下,即在Dll中设计两个函数,一个函数是取Form上的需要切换的,另外一个是取程序中showmessage之类的内容的。
    这样做有什么好处呢?你可以将Form上所有控件设计一个编号,即各个控件一般都有一个Tag属性,如果他们没有被用的话你可以用在这里,将所有的需要切换的控件的Tag编号后,在FormCreate的时候直接这么写:
    for i:=0 to ComponentCount-1 do
    begin
      if Components[i].Tag<>0 then
      begin
        if Components[i] is TLabel then
        (Components[i] as TLabel).Caption:=LoadLanString(Components[i].Tag) else
        if Components[i] is TEdit then
        ... ...
      end;
    end;
    对于在程序中显示的语句的切换,你需要对所有语句进行编号,比如你有一句话为‘Hello’
    那么程序可以这么写:
    声明一个 uDeclare的Unit
    在该Unit中有:
    const
      sHello=1
      sOK=2;
      ... ...
    然后你的程序中有一句本来是:
    showmessage('hello')
    那么需要更改成如下:
    showmessage(sHello);
    就可以了。有什么问题,QQ 156514982
      

  4.   

    謝謝,我試試,不過跟我的想法還是有些不同,jufeng_zhu(老猪) 的方法,程序員要修改tag,編程量較大,能否父類加一控件,或則函數,程序自己根據中英文實現翻譯。程序員一律在英文環境下開發。