zoukankan      html  css  js  c++  java
  • 初识kbmmw 的多语言支持

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

    运行起来。

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

    我们可以选择英文

     全部自动切换过来了。

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

  • 相关阅读:
    2019牛客暑期多校训练营(第八场)A All-one Matrices(单调栈+前缀和)
    2019牛客暑期多校训练营(第三场)A Graph Games(分块)
    2019牛客暑期多校训练营(第二场)E MAZE(线段树维护矩阵+DP)
    2019牛客暑期多校训练营(第二场)D Kth Minimum Clique(bitset+暴力枚举)
    2019牛客暑期多校训练营(第一场)H XOR(线性基)
    2019牛客暑期多校训练营(第六场)D Move(multiset+枚举)
    2019牛客暑期多校训练营(第五场)H subsequence 2(拓扑排序)
    2019牛客暑期多校训练营(第六场)J Upgrading Technology(矩阵前缀和+最小子串和+贪心)
    2019牛客暑期多校训练营(第五场)G subsequence 1(dp+组合数)
    P3857 [TJOI2008]彩灯(线性基)
  • 原文地址:https://www.cnblogs.com/xalion/p/15027264.html
Copyright © 2011-2022 走看看