SAP UI5 Library Resource Bundle 的设计原理
按照 Jerry 這篇文章介紹的代碼,運行之后,給類型為 sap.ui.model.type.Currency 的字段設置一個非 number 類型的值之后,觸發該數據類型自帶的數據校驗機制,顯示 Enter a number 的錯誤消息。
SAP UI5 應用開發教程之四十六 - 使用 Message Manager 實現開箱即用的驗證(Validation)信息拋出
本文介紹這個 Enter a number 文本的數據來源。
入口處:sap.ui.define 導致 ResourceBundle 的加載:
資源包是 *.properties 文件的集合。所有文件都使用相同的基本名稱(標識資源包的前綴)、標識每個文件中包含的語言的可選后綴以及固定的 .properties 擴展名來命名。語言后綴是根據舊的 JDK 語言環境語法形成的。按照慣例,應該存在沒有語言后綴的文件,并包含開發人員語言的原始未翻譯文本。如果找不到更合適的語言,則使用此文件。
當需要本地化文本時,應用程序使用 SAPUI5 API 加載與當前語言最匹配的屬性文件。這同樣適用于可以表示為字符串的任何其他本地化數據,例如日期格式化字符串。要從屬性文件中檢索文本,應用程序使用(與語言無關的)鍵。如果找不到此鍵的文本,則加載下一個最佳匹配文件并檢查文本。最后,如果沒有文件匹配,則加載并檢查原始文件。
執行 sap/m/ListItemBase.js module 的加載:
在 ListItemBase.js 里需要讀取 edit icon 的 url,因此觸發 ResourceBundle 的加載:
ListItemBase.prototype.DetailIconURI = IconPool.getIconURI("edit");進而觸發 CoreResourceBundle 的加載:
if (typeof info === 'number') {mRegistry[collectionName][iconName] = undefined; // avoid duplicate icon warninginfo = _IconRegistry.addIcon(iconName, collectionName, {fontFamily: mFontRegistry[collectionName].config.fontFamily,content: info & 0xFFFF,suppressMirroring: !!(info & 0x10000),resourceBundle: getCoreResourceBundle()});}加載代碼:
// Lazy load core resource bundlefunction getCoreResourceBundle() {if (!oCoreResourceBundle) {oCoreResourceBundle = sap.ui.getCore().getLibraryResourceBundle("sap.ui.core");}return oCoreResourceBundle;}最后得到 resource bundle 的完整 url:
https://sapui5.hana.ondemand.com/resources/sap/ui/core/messagebundle.properties
將上述 url 輸入瀏覽器地址欄訪問,得到完整的 resource bundle 內容:Enter a number 也在其中。
ResourceBundle.prototype.getText:
總結
以上是生活随笔為你收集整理的SAP UI5 Library Resource Bundle 的设计原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应聘社工面试自我介绍
- 下一篇: 进攻的近义词词