初識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        : "\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;

運行起來。

 

 可以看見所有的控件都自動成為中文了。

我們可以選擇英文

 

 全部自動切換過來了。

這個還是非常方便的,后面可以再介紹更復雜的方法。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM