`
univasity
  • 浏览: 801795 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[Kuix]XML:国际化动态内容

阅读更多

原文连接: http://www.kalmeo.org/projects/kuix/docs/xml_i18n

 

译文:

 

XML可以通过多种方式是屏幕更具属性显示动态的内容。

我们将为你简单地介绍这些属性并将为你演示一个关于怎样国际化动态内容的典型例子。

 

基础
国际化属性

在你的XML文件中,每处%I18N_KEY% 形式的地方都会被替换为他们的本土化相应的价值位于/i18n/message.properties或/i18n/message.XX.properties文件中,XX对应于所选择的语言。

 

数据绑定属性
${myProperty}和@{myProperty}基本上做同样的事情:在调用Kuix.loadScreen()或Kuix.loadXml()
同时通过myDataProvider.getValue("myProperty")从DataProvider获取一个值。他们的主要区别在 于在他们生命周期中widget(放置数值的地方)和DataProvider 之间的联系。

 

${propertyName}在解析时仅仅被转换为它本身的值. Widget和DataProvider之间无任何联系。

 

@{propertyName}在解析时被转换同时如果widget不为null将被绑定到DataProvider。

/**(略)
The main goal of this feature is to be able to change the value directly in the

DataProvider and it generate automaticaly the update on all binded widgets. The concept

go forward because you can mix more than one property in an attribute definition.

**/

 

典型例子
让我们用Kuix来指定一些东西。
我们从i18n开始:

messages.properties:
MY_I18N_KEY=Where is {0}? He is in {1}!
mainscreen.xml:
<screen title="I18n + dynamic data exemple">
    <textarea>%MY_I18N_KEY(Brian, the kitchen)%</textarea>
</screen>

 

运行后将显示如下信息:

"Where is Brian? He is in the kitchen!"

  

现在你可以把它用来指定除了Brian之外的东西或者在不同的地方。你可以定义动态的数据到i18n的 key(关键字)里作为参数:

mainscreen.xml:
<screen title="I18n + dynamic data exemple">
    <textarea>%MY_I18N_KEY(${human}, @{location})%</textarea>
</screen>

 

${human}属性仅仅在解析时被转换。无连接的作用。
@{location}属性将被提取并关联到DataProvider。

 

public class HumanLocatorDataProvider extends DataProvider {

    private static final String HUMAN_PROPERTY = "human";

    private static final String LOCATION_PROPERTY = "location";
    private String location = "the garden";

    public void setLocation(String location) {
        this.location = location;
        dispatchUpdateEvent(HUMAN_PROPERTY); // 这里应该打错了,HUMAN_PROPERTY应改为LOCATION_PROPERTY 
    }

    protected Object getUserDefinedValue(String property) {
        if (LOCATION_PROPERTY.equals(property)) {
            return location;
        }
        if (HUMAN_PROPERTY.equals(property)) {
            return "John";
        }
        return null;
    }

}

 

 

 

 

 

 

任何时候你可以调用setLocation()方法更新文字。
更新后的结果将会显示如下:

"Where is John? He is in the garden!"

 

*本人水平一般,仅供参考。更多信息请浏览原文。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics