SAPUI5基础知识10 - i18与国际化

1. 背景

i18n 是 “internationalization” 的缩写,其中的 18 是 “internationalization” 这个单词中间的字符数。i18n 是一种让应用程序支持多种语言的方法,也就是我们通常所说的国际化

在SAPUI5中,i18n主要通过使用资源模型(Resource Model)和资源束(Resource Bundle)来实现。资源模型是一种特殊的模型,它可以用来管理和访问资源束。资源束是一组键值对,其中的键是标识符,值是对应的本地化字符串。

2. 示例

下面是一个简单的例子:

首先,创建一个i18n资源束文件(例如:i18n.properties),并在其中定义你的本地化字符串:

helloMessage=Hello, World!

然后,你需要在你的应用程序中创建一个资源模型,并将它绑定到你的视图或控制器:

sap.ui.define(["sap/ui/core/mvc/Controller","sap/ui/model/resource/ResourceModel"
], function(Controller, ResourceModel) {"use strict";return Controller.extend("my.app.controller", {onInit: function() {var i18nModel = new ResourceModel({bundleName: "my.app.i18n.i18n"});this.getView().setModel(i18nModel, "i18n");}});
});

最后,你可以在你的视图中使用这些本地化字符串:

<Text text="{i18n>helloMessage}" />

在这个例子中,{i18n>helloMessage} 是一个绑定表达式,它告诉SAPUI5从名为 “i18n” 的模型中获取键为 “helloMessage” 的值。这个值就是我们在i18n.properties文件中定义的本地化字符串。

3. 练习

在上一篇博客练习的基础上,让我们将UI的文本移动到一个单独i18n资源文件中。
这样,所有的文本字符都集中在一个位置,可以很容易地翻译成其他语言。

3.1 创建i18n文件

我们在 webapp/i18n 文件夹下创建 i18n.properties 文件。文本的属性文件包含每个元素的名称-值对。可以通过添加大括号向文本添加任意数量的参数。大括号中的数字对应访问参数的顺序(从 0 开始)。
在这里插入图片描述

在本练习中,我们只会有一个 i18n.properties属性文件。

在实际项目中,将会为每种支持的语言单独创建一个文件,附加区域后缀,比如 i18n_de.properties 为德语,i18n_en.properties 为英语,依此类推。当用户运行应用程序时,SAPUI5 会加载适合用户环境的语言文件。

创建好的 i18n.properties 文件内容如下:

showHelloButtonText=Say Hello
helloMsg=Hello {0}

3.2 增强App.controller.js文件

onInit 函数中,我们实例化资源模型 ResourceModel

资源束bundleName为 zsapui5.test.i18n.i18n, 由应用程序命名空间 zsapui5.test(在 index.html 中定义)、文件夹名称 i18n 和最后一个没有扩展名的文件名 i18n 组成。SAPUI5 运行时会计算资源的正确路径,也即找到i18n.properties文件。

...
const i18nModel = new ResourceModel({bundleName: "zsapui5.test.i18n.i18n");...

接下来,将资源模型的实例绑定到视图上(模型实例设置为带有键i18n的命名模型)。

...
this.getView().setModel(i18nModel, "i18n");
...

onShowHello 事件处理程序函数中,我们访问 i18n 模型,从消息包文件中获取文本,并用数据模型中的/recipient/name替换占位符 {0}

...onShowHello: function () {// read msg from i18n modelconst oBundle = this.getView().getModel("i18n").getResourceBundle();const sRecipient = this.getView().getModel().getProperty("/recipient/name");const sMsg = oBundle.getText("helloMsg", [sRecipient]);// show messageMessageToast.show(sMsg);}
...

getProperty() 方法可以在任何模型中调用,并将数据路径作为参数。

此外,资源包ResouceBundle具有一个特定的 getText() 方法,该方法将字符串数组作为第二个参数,来替换文本中的非静态数据,而不是手动连接可翻译文本。

在运行时,SAPUI5 会根据您的浏览器设置和区域设置尝试加载正确的 i18n_.properties 文件。

在此例中,我们只创建了一个i18n.properties文件以简化操作。

但是,可以在浏览器的开发者工具的网络流量中看到 SAPUI5 在回退到默认的 i18n.properties 文件之前,尝试加载一个或多个 i18n_.properties 文件。

改动后的App.controller.js文件最终代码如下:


sap.ui.define(["sap/ui/core/mvc/Controller","sap/m/MessageToast","sap/ui/model/json/JSONModel","sap/ui/model/resource/ResourceModel"
], function (Controller, MessageToast, JSONModel, ResourceModel) {"use strict";return Controller.extend("zsapui5.test.controller.App", {onInit: function () {//set data model on viewconst oData = {recipient: {name: "World"}};const oModel = new JSONModel(oData);this.getView().setModel(oModel);// set i18n model on viewconst i18nModel = new ResourceModel({bundleName: "zsapui5.test.i18n.i18n"});this.getView().setModel(i18nModel, "i18n");},onShowHello: function () {// read msg from i18n modelconst oBundle = this.getView().getModel("i18n").getResourceBundle();const sRecipient = this.getView().getModel().getProperty("/recipient/name");const sMsg = oBundle.getText("helloMsg", [sRecipient]);// show messageMessageToast.show(sMsg);}});
});

3.3 增强App.view.xml文件

在XML视图中,将按钮文本连接到i18n模型中的showHelloButtonText属性。

...<Button text="{i18n>showHelloButtonText}"press = ".onShowHello"/>
...      

资源包是一个扁平结构,因此路径前面的斜杠(/)可以省略。

改动后的App.view.xml文件如下:

<mvc:ViewcontrollerName="ui5.walkthrough.controller.App"xmlns="sap.m"xmlns:mvc="sap.ui.core.mvc"><Buttontext="{i18n>showHelloButtonText}"press=".onShowHello"/><Inputvalue="{/recipient/name}"description="Hello {/recipient/name}"valueLiveUpdate="true"width="60%"/>
</mvc:View>

注意: 为了简化展示,此示例中的描述文本并没有完全本地化(例如Input的description中Hello还是hardcoded)。为了安全起见,我们必须使用类似于控制器中的机制来使用资源包中的字符串并替换其中的部分。这可以通过sap/base/strings/formatMessage这个格式化程序来完成。
此外,i18n文件仅影响客户端应用程序文本。从后端系统加载的文本,仍然以后端系统支持的所有语言显示。

3.4 编程规范

  • 国际化的资源模型被称为i18n模型。

  • 默认文件名为i18n.properties

  • 资源包键以小写驼峰写法编写。

  • 资源包的值可以包含参数像{0}{1}{2},…

  • 不要拼接(concatenate)需要翻译的字符串

  • 对于特殊字符,请使用Unicode转义序列。

3.5 运行程序

运行改动后的程序,效果如下:
在这里插入图片描述

显示效果与上篇博客中的效果相同,但如果通过F12来调试下程序,可以在程序加载过程中看到,SAPUI5 在回退到默认的 i18n.properties 文件之前,尝试加载一个或多个 i18n_.properties 文件。

在这里插入图片描述
在控制台里,也可以发现这两个错误消息:

在这里插入图片描述

4. 小结

本文介绍了SAPUI5框架下,文本国际化的实现方式,并给出了相应的示例代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跑腿平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;基础数据管理&#xff0c;管理员管理&#xff0c;接单详情管理&#xff0c;跑腿员管理&#xff0c;跑腿任务管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;跑腿任务&#xff0c;接单员&…

RocketMQ源码学习笔记:Producer启动流程

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview1.1、创建MQClientInstance1.1.1、检查1.1.1、MQClientInstance的ID 1.2、MQClientInstance.start() 1、Overview 这是发送信息的代码样例&#xff0c; DefaultMQProducer produ…

Gradio 教程四:Building Generative AI Applications with Gradio

文章目录 一、使用interface构建NLP应用1.1 构建文本摘要应用1.1.1 设置API密钥1.1.2 调用文本摘要API1.1.3 运行本地模型获取响应1.1.4 使用interface构建应用 1.2 构建命名实体识别应用1.2.1 调用NER任务API1.2.2 使用interface构建应用1.2.3 加入额外函数&#xff0c;合并to…

CPU/内存/综合性能评估工具汇总-3:unixbench

目录 一、概括二、UnixBench 一、概括 嵌入式开发中对要设计的产品、立项的项目进行设计时&#xff0c;往往需要对关键芯片进行性能评估&#xff0c;本文主要总结基于linux系统的产品在性能评估时的工具使用总结&#xff0c;在aarch64(arm64平台下测试)&#xff0c;板卡根文件…

Rhino 犀牛三维建模工具下载安装,Rhino 适用于机械设计广泛领域

Rhinoceros&#xff0c;这款软件小巧而强大&#xff0c;无论是机械设计、科学工业还是三维动画等多元化领域&#xff0c;它都能展现出其惊人的建模能力。 Rhinoceros所包含的NURBS建模功能&#xff0c;堪称业界翘楚。NURBS&#xff0c;即非均匀有理B样条&#xff0c;是计算机图…

【笔记】记录一次全新的Java项目部署过程

记录一次全新的Java项目部署过程 环境&#xff1a;CentOS7 一、初始环境准备 yum install wget -y yum install vim -y yum install net-tools -y mkdir /data mkdir /data/html mkdir /data/backend一、安装JDK 17 安装JDK17 # 下载rpm wget https://download.oracle.com…

数据驱动:Facebook的广告策略与商业模式

在现代数字经济中&#xff0c;数据已经成为新的石油&#xff0c;驱动着企业的增长和创新。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;充分利用其庞大的用户数据和先进的算法技术&#xff0c;建立了一个高度精确和高效的广告生态系统。这不仅推动了平台自…

带着味蕾去旅行,在“必吃”餐厅里认识一座城

时代不同了&#xff0c;旅游也变了。十多年前的旅游&#xff0c;是文艺青年的诗与远方&#xff0c;生活在别处的荷尔蒙之旅&#xff0c;宁浩拍了部电影叫《心花怒放》&#xff0c;那些年不管是大理、丽江、拉萨、成都&#xff0c;还是张家界&#xff0c;商家最喜欢用的宣传口号…

Oracle Database 23ai新特性:DB_DEVELOPER_ROLE角色

角色介绍 从 Oracle Database 23ai 开始&#xff0c;新角色“DB_DEVELOPER_ROLE”允许管理员快速分配开发人员为 Oracle 数据库设计、构建和部署应用程序所需的所有必要权限。&#xff08;包括构建数据模型所需的系统权限以及监视和调试应用程序所需的对象权限&#xff09;。通…

NSSCTF-Web题目23(RCE-空格绕过)

目录 [SWPUCTF 2022 新生赛]webdog1__start 1、题目 2、知识点 3、思路 [FSCTF 2023]webshell是啥捏 4、题目 5、知识点 6、思路 [SWPUCTF 2022 新生赛]webdog1__start 1、题目 2、知识点 RCE、空格绕过&#xff0c;嵌套eval 3、思路 出现这个页面&#xff0c;没有其…

【SSL 1056】最大子矩阵 (多维DP)

题目大意 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵&#xff0c;你的任务是找到最大的非空&#xff08;大小至少是 1 ∗ 1 1*1 1∗1&#xff09;子矩阵。 比如&#xff0c;如下 4 ∗ 4 4*4 4∗4 子矩阵 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 的最大子矩阵是 …

组件丰富、支持2/3D数据可视化的编辑器平台软件?

数据可视化编辑器通常用于创建交互式的图表和模型&#xff0c;可以帮助用户以更直观的方式展示数据。一些在线平台软件提供了丰富的组件&#xff0c;支持2D和3D数据可视化&#xff1a; 1、Plotly - 提供了多种语言的库&#xff0c;支持在线创建交互式图表&#xff0c;包括2D和…

mac|Mysql WorkBench导入文件失败(修改编码)

⚠️&#xff1a;表格中有中文的不适用表格中有中文的不适用表格中有中文的不适用表格中有中文的不适用 我有一个excel表&#xff0c;想导入到mysql数据库中&#xff0c;但是Workbench的导入格式只支持csv&#xff0c;通过excel、wps将excel另存为csv文件进行导入 导入会因为编…

【软件测试】之自动化测试

&#x1f3c0;&#x1f3c0;&#x1f3c0;来都来了&#xff0c;不妨点个关注&#xff01; &#x1f3a7;&#x1f3a7;&#x1f3a7;博客主页&#xff1a;欢迎各位大佬! 文章目录 什么是自动化测试Selenium介绍什么是SeleniumSelenium的特点工作原理 SeleniumJava环境搭建下载…

第1章 信息系统综合知识

第1章 信息系统综合知识 本章主要介绍信息系统综合知识&#xff0c;介绍信息、信息系统的基本概念&#xff0c;概述两化融合和国家信息化战略&#xff0c;讲解电子政务、电子商务的典型应用&#xff0c;描述信息化整体总体规划以及IT战略的主要内容。 1.1 信息的定义和属性 …

【TB作品】矩阵键盘电话拨号,ATMEGA16单片机,Proteus仿真 atmega16矩阵键盘电话拨号

atmega16矩阵键盘电话拨号 c代码和仿真图&#xff1a; 使用ATmega16实现矩阵键盘电话拨号功能 项目背景 在电子设计和嵌入式系统开发中&#xff0c;矩阵键盘是常见的人机交互方式。它可以实现较多按键的输入&#xff0c;同时节省单片机的I/O资源。结合LCD显示和蜂鸣器&am…

Flume集群部署(手把手部署图文详细版)

前景概要&#xff1a; Kafka消息订阅系统在大数据业务中有着重要运用&#xff0c;尤其在实时业务中&#xff0c;kafka是必不可少的组件之一。 Flume是大数据组件中重要的数据采集工具&#xff0c;我们常利用Flume采集各种数据源的数据供其他组件分析使用。例如在实时业务中&…

Java房屋租赁管理系统附论文

作者介绍&#xff1a;计算机专业研究生&#xff0c;现企业打工人&#xff0c;从事Java全栈开发 主要内容&#xff1a;技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流&#xff08;SCI论文两篇&#xff09; 上点关注下点赞 生活越过…

以智能化为舵手,引领现代计算机系统架构新航向

编者按&#xff1a;如今计算机系统承载的服务和算法逻辑日益复杂&#xff0c;理解、设计并改进计算机系统已成为核心挑战。面对系统复杂度和规模的指数级增长&#xff0c;以及新的大模型驱动场景下的分布式系统形态的涌现&#xff0c;人们亟需创新方法与技术来应对。在计算机系…

光明领鲜物流荣膺“2023中国冷链物流百强企业”荣誉称号

近日&#xff0c;以“全球链接跨界融合”为主题的2024第十六届全球食品冷链大会举行&#xff0c;光明乳业旗下光明领鲜物流受邀参加。 作为光明乳业全产业链中重要组成部分&#xff0c;光明领鲜物流始终保持高标准严要求&#xff0c;专注于冷链质量和服务持续完善&#xff0c;并…