現在越來越多軟件開始支持多語言,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;
運行起來。

可以看見所有的控件都自動成為中文了。
我們可以選擇英文

全部自動切換過來了。
這個還是非常方便的,后面可以再介紹更復雜的方法。
