はじめに
【SAPUI5】i18nをライブラリ化するの記事で、ライブラリのi18nファイルを別のアプリに取り込む方法を紹介しました。もっといい方法があることがわかったので書きたいと思います。
messagebundleとは
ライブラリ単位で持っている、翻訳可能なテキストのファイルです。書き方はi18nと同じです。
messagebundleのテキストをアプリケーションから呼ぶには
コントローラーから呼ぶ方法
コントローラーの中だけで使いたい場合は、この方法が簡単です。
sap.ui.getCore().getLibraryResourceBundle("ライブラリ名(フルパス)").getText("テキストID")
参考:APIリファレンス
onSayHello: function () {
//ライブラリからテキストを取得
var sText = sap.ui.getCore().getLibraryResourceBundle("demo.library.zdemolibrary").getText("SAY_HELLO");
MessageBox.alert(sText);
}
ビューから呼ぶ方法
ビューから呼ぶ方法は2つ考えられます。
- 【SAPUI5】i18nをライブラリ化すると同じように、アプリケーション本体のi18nとマージする
- 独立したリソースモデルを作る
####アプリケーション本体のi18nとマージする
Component.jsで以下のように書きます。
//ライブラリのリソースを取り込み
var oBundle = sap.ui.getCore().getLibraryResourceBundle("demo.library.zdemolibrary");
this.getModel("i18n").enhance(oBundle);
ビューは以下のようになります。
<Text text="{i18n>SAY_HELLO}"/>
独立したリソースモデルを作る
manifest.jsonにリソースモデルを追加します。以下では、"msg"という名前で追加しています。
こうすると、アプリケーションのi18nとライブラリで同じテキストIDを使っても問題ありません。
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "demo.Train_17_UseLibraryText.i18n.i18n"
}
},
"msg": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "demo.library.zdemolibrary.messagebundle"
}
}
ビューは以下のようになります。
<Text text="{msg>SAY_HELLO}"/>