现在越来越多软件开始支持多语言,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;
运行起来。
可以看见所有的控件都自动成为中文了。
我们可以选择英文
全部自动切换过来了。
这个还是非常方便的,后面可以再介绍更复杂的方法。