现在越来越多软件开始支持多语言,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 : " "
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;
运行起来。

可以看见所有的控件都自动成为中文了。
我们可以选择英文

全部自动切换过来了。
这个还是非常方便的,后面可以再介绍更复杂的方法。