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>
[.CreateTextareaRES.Pattern, 15, this.@Pattern.]
[.CreateTextareaRES.Content, 35, this.@Content.]
[.CreateTextareaRES.Outtext, 45, this.@Outtext.]
</table>
<.function CreateTextareatheCaption, 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.RegexMatchPattern, Function = 'DoMatch', Option = '' this.LoadBindData function DoMatchIndex, 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):