越來越多的程序使用了多國語言切換,雖然Delphi自帶多語言包的添加和配置,
但是那種方法在切換語言時界面會出現(xiàn)閃爍,而且實現(xiàn)起來很麻煩,這里我介紹給大家的是利用INI文件來讀取界面的語種文字,
用這種方法,不但簡單易行,而且在切換的時候不會出現(xiàn)界面的閃爍。
我們從一個例子出發(fā),看看怎么實現(xiàn)語言的切換。首先建立一個新工程。放置如下組件:(如圖)
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
Label1: TLabel;
Button1: TButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
Button2: TButton;
Label2: TLabel;
ComboBox1: TComboBox;
Label3: TLabel;
由于要讀取Ini文件,所以在USES中加入聲明IniFiles;
然后將Button1和Button2的ShowHint屬性設(shè)置為True;
其中我們用ComboBox1來顯示可供選擇的語言和用來選擇語言。
我們在程序的目錄下編輯如下的Chinese GB.Ini文件:
;///////////////////////////////////////////////////////////////////
;
; 翻譯的一些規(guī)則:
; 翻譯前,拷貝 Chinese GB.ini 改名到 yourlanguage.ini
; 僅僅翻譯符號'='后的文字
;
[Translations]
;
Label1.Caption =文字1
Label2.Caption =文字2
Label3.Caption =語言
Button1.Caption =按鈕1
Button2.Caption =按鈕2
Button1.Hint =按鈕1_提示
Button2.Hint =按鈕2_提示
CheckBox1.Caption =復(fù)選框1
CheckBox2.Caption =復(fù)選框2
File1.Caption =文件
Exit1.Caption =退出
;
[Messages]
;
M1 =信息框測試
;
;//////////////////////////////////////////////////////////////////
同樣的方法編輯一個名為English.ini的文件,將“=”左邊的文字改為英文。
例如:Label1.Caption =Label1
程序運行時,我們查找當(dāng)前目錄下所有的語言配置文件(*.ini),
為了達到這個目的,
我編寫了如下的函數(shù)搜索目錄下所有的語言配置文件的文件名,
然后將文件名去掉ini擴展名保存返回:
function TForm1.SearchLanguagePack:TStrings;
var
ResultStrings:TStrings;
DosError:integer;
SearchRec:TsearchRec;
begin
ResultStrings:=TStringList.Create;
DosError:=FindFirst(ExtractFilePath(ParamStr(0))+'*.ini', faAnyFile, SearchRec);
while DosError=0 do
begin
{ 返回的文件名并去掉末尾的.ini字符 }
ResultStrings.Add(ChangeFileExt(SearchRec.Name,''));
DosError:=FindNext(SearchRec);
end;
FindClose(SearchRec);
Result:=ResultStrings;
end;
但是那種方法在切換語言時界面會出現(xiàn)閃爍,而且實現(xiàn)起來很麻煩,這里我介紹給大家的是利用INI文件來讀取界面的語種文字,
用這種方法,不但簡單易行,而且在切換的時候不會出現(xiàn)界面的閃爍。
我們從一個例子出發(fā),看看怎么實現(xiàn)語言的切換。首先建立一個新工程。放置如下組件:(如圖)
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
Label1: TLabel;
Button1: TButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
Button2: TButton;
Label2: TLabel;
ComboBox1: TComboBox;
Label3: TLabel;
由于要讀取Ini文件,所以在USES中加入聲明IniFiles;
然后將Button1和Button2的ShowHint屬性設(shè)置為True;
其中我們用ComboBox1來顯示可供選擇的語言和用來選擇語言。
我們在程序的目錄下編輯如下的Chinese GB.Ini文件:
;///////////////////////////////////////////////////////////////////
;
; 翻譯的一些規(guī)則:
; 翻譯前,拷貝 Chinese GB.ini 改名到 yourlanguage.ini
; 僅僅翻譯符號'='后的文字
;
[Translations]
;
Label1.Caption =文字1
Label2.Caption =文字2
Label3.Caption =語言
Button1.Caption =按鈕1
Button2.Caption =按鈕2
Button1.Hint =按鈕1_提示
Button2.Hint =按鈕2_提示
CheckBox1.Caption =復(fù)選框1
CheckBox2.Caption =復(fù)選框2
File1.Caption =文件
Exit1.Caption =退出
;
[Messages]
;
M1 =信息框測試
;
;//////////////////////////////////////////////////////////////////
同樣的方法編輯一個名為English.ini的文件,將“=”左邊的文字改為英文。
例如:Label1.Caption =Label1
程序運行時,我們查找當(dāng)前目錄下所有的語言配置文件(*.ini),
為了達到這個目的,
我編寫了如下的函數(shù)搜索目錄下所有的語言配置文件的文件名,
然后將文件名去掉ini擴展名保存返回:
function TForm1.SearchLanguagePack:TStrings;
var
ResultStrings:TStrings;
DosError:integer;
SearchRec:TsearchRec;
begin
ResultStrings:=TStringList.Create;
DosError:=FindFirst(ExtractFilePath(ParamStr(0))+'*.ini', faAnyFile, SearchRec);
while DosError=0 do
begin
{ 返回的文件名并去掉末尾的.ini字符 }
ResultStrings.Add(ChangeFileExt(SearchRec.Name,''));
DosError:=FindNext(SearchRec);
end;
FindClose(SearchRec);
Result:=ResultStrings;
end;

