現在越來越多軟件開始支持多語言,Delphi IDE 自身很早也支持英語、法語、德語和日語。開發時也通過DLL
支持多語言,但是這種方式有很大的局限性。使用起來非常不方便。具體的介紹可以參見這一篇文章。
新版kbmmw使用配置文件實現支持多語言,而且非常靈活方便。下面通過一個簡單的例子說明他的強大。
首先,我們做一個簡單的界面,放上常用的界面控件,如圖。
首先要引用兩個單元:kbmMWI18N, kbmMWI18NVCL。
在窗體建立事件中,加入下面的代碼。
procedure TForm3.FormCreate(Sender: TObject); begin // 注冊本窗體為自動翻譯. i18n.RegisterComponent(self); i18n.IgnoreComponent(cbLanguage); // 不翻譯語言選擇下拉框 //如果有語言文件的話,載入語言文件test.yaml. i18n.Load('','test.yaml'); // 把所有的語言加入下拉框. cbLanguage.Items.AddStrings(i18n.LanguageNames); cbLanguage.ItemIndex:=0; end;
運行,如圖。

只顯示一個default 語言,下拉框沒有其他語言,這是因為我們還沒有制作語言文件。
現在我們做一個語言文件。
語言文件格式可以是yaml,也可以是json。使用yaml 更直觀,我們使用yaml格式。
languages: Default: caption : "" description : "Default language when no valid languages has been found. Rename to correct default language name." flag : small: "" large: "" formatSettings: currencyString : ¥ currencyFormat : 0 currencyDecimals : 2 negativeCurrencyFormat : 2 dateSeparator : "-" timeSeparator : ":" listSeparator : "," shortDateFormat : yyyy/mm/dd longDateFormat : yyyy/mm/dd timeAMString : 上午 timePMString : 下午 shortTimeFormat : "h:nn" longTimeFormat : "hh:nn:ss" shortMonthNames : [ 1月, 2月, 3月, 4月, 5月, 6月, 7月, 8月, 9月, 10月, 11月, 12月 ] longMonthNames : [ 一月, 二月, 三月, 四月, 五月, 六月, 七月, 八月, 九月, 十月, 十一月, 十二月 ] shortDayNames : [ 周日, 周一, 周二, 周三, 周四, 周五, 周六 ] longDayNames : [ 星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六 ] thousandSeparator : "," decimalSeparator : "." twoDigitYearCenturyWindow: 50 phrases : Form3 : 中文窗體 number : 數字 "Change language": 選擇語言 Button1 : 按鈕1 Edit1 : 文本1 propertyNames : [ Caption, Text, Items, Strings ] properties : ~ en-US: caption : English description : "For people who best understands English" flag : small: "" large: "" formatSettings: currencyString : "$" currencyFormat : 2 currencyDecimals : 2 shortDateFormat : "%M/%D/%Y" longDateFormat : "%M2 %D. %Y" shortTimeFormat : "%H:%N" longTimeFormat : "%H:%N:%S" shortMonthNames : [ Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec ] longMonthNames : [ January, February, March, April, May, June, July, August, September, October, November, December ] shortDayNames : [ Sun, Mon, Tue, Wed, Thu, Fri, Sat ] longDayNames : [ Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday ] thousandSeparator : "\0" decimalSeparator : "." twoDigitYearCenturyWindow: 50 negCurrFormat : 8 negativeCurrencyFormat : 1 dateSeparator : / timeSeparator : ":" listSeparator : "," timeAMString : AM timePMString : PM phrases : Form3 : Form3 number : number "Change language": "Change language" Button1 : Button1 Edit1 : Edit1 propertyNames : [ Text, Caption, Hint, Width, Height ]
保存文件名為test.yaml.
語言選擇下拉框加入代碼。
procedure TForm3.cbLanguageChange(Sender: TObject); begin i18n.CurrentLanguage:=cbLanguage.Text; end;
運行起來。
可以看見所有的控件都自動成為中文了。
我們可以選擇英文
全部自動切換過來了。
這個還是非常方便的,后面可以再介紹更復雜的方法。