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 後執行程式