Nuva 示例代码(每日一帖)之 国际化界面

<..========================================================
==                                                       ==
==                Macrobject Nuva Samples                ==
==                                                       ==
==      Copyright (c) 2004-2006 Macrobject Software      ==
==                                                       ==
==                  ALL RIGHTS RESERVED                  ==
==                                                       ==
==               http://www.macrobject.com               ==
==                                                       ==
========================================================..>
<.
  using('MO_RES.nuva')
  /* == Code in MO_RES.nuva ==
  var RES = System.List.SettingList()
  RES.Load(System.Path.ProjectPath ~ 'Languages\Language.ini')
  RES.Load(System.Path.ProjectPath ~ 'Languages\' ~ RES.DefaultLanguage)
     == End of MO_RES.nuva  == */

  class MainForm = System.UI.HtmlForm()
    Caption = RES.RegexTester
    Width   = 800
    Height  = 600

    var Pattern = 'function \w+'
    var Content = System.File.Load('国际化界面.nuvaexec')
    var Outtext

    function CreateBody().>
<table width="100%" height="100%">
  <tr height="5%" align="right">
    <td/><td><input type="button" value="[.=RES.MatchAll.]" mo:onclick="Match"></td>
  </tr>
  [.CreateTextarea(RES.Pattern, 15, this.@Pattern).]
  [.CreateTextarea(RES.Content, 35, this.@Content).]
  [.CreateTextarea(RES.Outtext, 45, this.@Outtext).]
</table>

    <.function CreateTextarea(theCaption, theHeight, theBind).>
  <tr height="[.=theHeight.]%">
    <td width="40">[.=theCaption.]:</td>
    <td>
      <textarea style="width:100%;height:100%" mo:binddata="[.=theBind.]" mo:bindattr="value"></textarea>
    </td>
  </tr>
    <.end function
    end function

    function Match()
      this.SaveBindData()
      Outtext = Content.RegexMatch(Pattern, Function = 'DoMatch', Option = '')
      this.LoadBindData()

      function DoMatch(Index, Length, Value, Match)
        Result := Value ~ \r\n ~ '--------------------------------' ~ \r\n;
      end function
    end function

    function OnShow()
      this.LoadBindData()
      this.Match()
    end function
  end class

  var main = MainForm()
  main.Show()

  System.App.Run()
.>

<..
【简介】
    本例是上例(正则测试器)的简单改进,通过对界面文字的简单处理,即可方便的实现界面的国际化和本地化。

【看点】
    1、本例演示了 Nuva 语言的 GUI 应用、面向对象编程、事件驱动以及数据绑定,相应的内容请参考简单浏览器和正则测试器的示例程序及其说明。

    2、本例中用到了国际化(本地化)的代码和语言文件,代码放在 MO_RES.nuva 文件中,语言文件放在 Languages 目录中。

    3、Languages 目录中有一个 Language.ini 文件,该文件内容如下:
       DefaultLanguage=English.lan
       DefaultLanguage 表示默认的语言,等号后面是实际的语言文件名

    4、在本例中我们给出了汉语和英语的语言文件,分别内容如下:
       Chinese.lan
          RegexTester=正则测试器
          MatchAll=匹配所有
          Pattern=正则
          Content=正文
          Outtext=结果

       English.lan
          RegexTester=Regex Tester
          MatchAll=Match All
          Pattern=Pattern
          Content=Content
          Outtext=Outtext

    5、MO_RES.nuva 文件内容如下:
        var RES = System.List.SettingList()
        RES.Load(System.Path.ProjectPath ~ 'Languages\Language.ini')
        RES.Load(System.Path.ProjectPath ~ 'Languages\' ~ RES.DefaultLanguage)

        其中 RES 是定义的资源名称,System.List.SettingList 是一个配置列表,在本例中,RES 首先读入 Languages\Language.ini 的配置信息,然后通过 Languages\Language.ini 的 DefaultLanguage 的定义读入真正的语言文件,从而实现了界面语言的国际化和本地化的实现。

        System.Path.ProjectPath 定义了被执行工程(Nuva 工程或文件)的路径。

        通过 RES 对象的属性,我们可以直接存取国际化的文本信息,如下:
          RES.Name 表示语言文件中 Name 项的内容,比如在汉语中可能为“名称”

【扩展】
    本例可以进一步扩展以增强其实用性,比如可以增加界面语言的种类,通过编写更多的语言文件,从而实现一个真正意义上的国际版软件。
..>

本例运行结果如下(English.lan):

本例运行结果如下(Chinese.lan):

posted on 2006-09-02 18:34  Wisdom-zh  阅读(648)  评论(3编辑  收藏  举报

导航