DKLang Localization Package
Installation
Duplicate case label issue #8
DKLang Translation Editor
自 Delphi 6(含) 以上的 Delphi 版本皆可使用,開放原始碼,免費,簡單易用,功能強大!!
視自己的 Delphi 版本,到 DKLang 官網下載對應的 DKLang,因為老灰鴨還在用 Delphi2010,所以我下載的 DKLang 版本為 4.01。
解壓後,將解壓出來的資料夾放至您所屬意位置,老灰鴨的習慣是放在 Delphi 安裝目錄下的 lib 資料夾
C:\Embarcadero\RAD Studio\7.0\lib\3rdparty\dklang-dklang-4.01
安裝元件
* 開啟 Packages 資料夾下的 dklang.bpl
→ compile
 
case wsPropVal[i] of
    'A'..'Z', 'a'..'z', #161..High(Char):    // 這行會出錯
        begin
            Result := True;
            Break;
        end;
end;
改成
case wsPropVal[i] of
    'A'..'Z', 'a'..'z', #$161..High(Char):    // 在 161 的左方加上 $ 就能通過 compile 了
        begin
            Result := True;
            Break;
        end;
end;
 
* 接著開啟 dcldklang12
→ compile
→ install
安裝完成後, 會出現在元件盤的 System 頁籤
* 按功能表的 Tools
→ Options...
→ Environment Options
→ Delphi Options
→ Library - Win32
→ Library path
加入 dkLang 的路徑,就可以開始使用 dkLang
在解壓後的 dkLang 資料夾下有 Examples 資料夾,包含幾個範例程式,可供您參考如何使用 dkLang;直接開啟 compile "Simple" 這個範例程式就可以看到執行結果了。
====================
試著建立自己的專案驗證一下 ----
* 建立一個新專案,專案名稱為 Project1
* 在 Form1 上放一顆 TDKLanguageController 元件,name 屬性設為 cbLanguage
* 放一個 Button,Caption = "測試"
* 將專案存檔,您會看到專案所在的目錄有一個與專案同名的 Project1.dklang,以純文字編輯器(如:Notepad++) 開啟 Project1.dklang
Project1.dklang 內容:
[Form1] Caption=00000001,測試 Button1.Caption=00000002,測試 cbLanguage.Text=00000003,cbLanguage
下載並安裝 DKLang Translation Editor,選擇 來源語言 和 要翻譯成何種語言,在本例,來源語言是繁體中文,要翻譯成簡體中文。
開始編寫,將粗體字改成 簡體中文。
翻譯完成,存檔,檔名為 cn.lng。
cn.lng 內容
SourceLANGID=1028 LANGID=2052 Generator=DKLang Translation Editor v3.0 LastModified=2017-07-22 00:49:57 [Form1] 00000001=测试 00000002=测试 00000003=cbLanguage [$CONSTANTS]
在 Form1 的 OnCreate 和 cbLanguage 的 OnChange 寫入下面的程式碼
 
procedure TForm1.cbLanguageChange(Sender: TObject);
var
    iIndex: Integer;
begin
    iIndex := cbLanguage.ItemIndex;
    if iIndex<0 then
        iIndex := 0; // When there's no valid selection in cbLanguage we use the default language (Index=0)
    LangManager.LanguageID := LangManager.LanguageIDs[iIndex];
end;
procedure TForm1.FormCreate(Sender: TObject);
var
    i: Integer;
begin
    // Scan for language files in the app directory and register them in the LangManager object
    LangManager.ScanForLangFiles(ExtractFileDir(ParamStr(0)), '*.lng', False);
    // Fill cbLanguage with available languages
    for i := 0 to LangManager.LanguageCount-1 do
        cbLanguage.Items.Add(LangManager.LanguageNames[i]);
    // Index=0 always means the default language
    cbLanguage.ItemIndex := 0;
end;
 
* compile 後執行程式






