现在越来越多软件开始支持多语言,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;

运行起来。

 

 可以看见所有的控件都自动成为中文了。

我们可以选择英文

 

 全部自动切换过来了。

这个还是非常方便的,后面可以再介绍更复杂的方法。

 

 

posted on 2021-07-18 18:16  xalion  阅读(146)  评论(1编辑  收藏  举报