Fiori-Step8-Translatable-Texts

这次主要是把UI中的文本放到一个单独的文件中,这样集中进行维护,方便翻译至其它语言。
这个国际化的过程简称 i18n, 在SAPUI5中通过一种特殊的resource model和标准的数据绑定(前面没有 ‘/’ )

新建一个文件夹i18n,新建一个文件i18n.properties
每一个元素的文本都以name-value的形式存储在这个properties文件中。
实际项目中,可能每一个语言新建一个,比如 i18n_de.properties for German, i18n_en.properties for English,这样用户登录可以装载合适的文本。

onInit函数中实例化ResouceModel,这里bundleName路径包含了两部分,前面sap.ui.demo.wt这个是index.html中定义的应用的命名空间,后面i18n.i18n是properties文件的路径(文件夹.文件名)。SAPUI5运行环境会自动根据这个路径查找资源文件
this.getView().setModel(i18nModel,"i18n")这句话的意思是在使用这个Controller的View上set一个model的实例i18nModel,Key是i18n。

接下在就是在onShowHello事件句柄函数中来读这个Model了。

1
2
var oBundle = this.getView().getModel("i18n").getResourceBundle();
var sRecipient = this.getView().getModel().getProperty("/recipient/name");

这里我挺困惑的,这里两次getModel,上面加了model name,下面省略了,我用下面的方式看他们的结果,结果上面取到的是EventProvider sap.ui.model.resource.ResourceModel,下面取到的是EventProvider sap.ui.model.json.JSONModel,查了下api,说是不指定model name的话就是默认的model

1
2
MessageToast.show(this.getView().getModel("i18n"));
MessageToast.show(this.getView().getModel());

getResourceBundle:

getText:

getProperty:


在XML View中,我们使用了数据绑定来连接按钮文本和i18n model中的showHelloButtonText属性。

总结几点:

  • 国际化的resource model 使用 i18n
  • 默认的文件名 i18n.properties
  • Resource bundle的key要用小写,比如上面例子中用到的i18n
  • Resource bundle 的值可以包含多个,例如{1},{2},{3}…
  • 不要拼接要翻译的字符串,要用占位符
Jim Guo wechat
ex. subscribe to my blog by scanning my public wechat account