UI5-文档-4.8-Translatable Texts
在这一步中,我们将UI的文本移动到一个单独的资源文件中。
这样,他们都在一个中心位置,可以很容易地翻译成其他语言。这个国际化过程(简称i18n)是在SAPUI5中通过使用一种特殊的资源模型和标准的数据绑定语法实现的,但是没有前面的/。
Preview

An input field and a description displaying the value of the input field (No visual changes to last step)
Coding
You can view and download all files at Walkthrough - Step 8.
webapp/i18n/i18n.properties (New)
showHelloButtonText=Say Hello
helloMsg=Hello {0}
在本教程中,我们将只有一个属性文件。但是,在实际项目中,对于每种受支持的语言,您都有一个单独的文件,该文件带有地区后缀,例如i18n_de 德语属性 i18n_en英语属性,等等。当用户运行应用程序时,SAPUI5将加载最适合用户环境的语言文件。我们创建文件夹webapp/i18n和文件i18n。属性里面。解析后的包名是sap.ui.demo.walk.i18n,稍后我们将看到。文本的属性文件包含每个元素的名称-值对。您可以向文本中添加任意数量的参数,方法是向文本中添加大括号中的数字。这些数字与访问参数的顺序(s)相对应.
controller/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("sap.ui.demo.walkthrough.controller.App", {
onInit : function () {
// set data model on view
var oData = {
recipient : {
name : "World"
}
};
var oModel = new JSONModel(oData);
this.getView().setModel(oModel);
// set i18n model on view
var i18nModel = new ResourceModel({
bundleName: "sap.ui.demo.walkthrough.i18n.i18n"
});
this.getView().setModel(i18nModel, "i18n");
},
onShowHello : function () {
// read msg from i18n model
var oBundle = this.getView().getModel("i18n").getResourceBundle();
var sRecipient = this.getView().getModel().getProperty("/recipient/name");
var sMsg = oBundle.getText("helloMsg", [sRecipient]);
// show message
MessageToast.show(sMsg);
}
});
});
在onInit函数中,我们实例化了ResourceModel,它指向文本现在所在的新消息包文件(i18n).属性文件。包名sap.ui.demo. i18n.i18n包括应用程序名称空间sap.ui.demo.演练(index.html中定义的应用程序根目录)、文件夹名i18n,最后是不带扩展名的文件名i18n。SAPUI5运行时计算到资源的正确路径; 这里是到i18n.properties属性文件。接下来,在视图上将模型实例设置为具有键i18n的命名模型。当需要同时使用多个模型时,可以使用命名模型。
在onShowHello事件处理函数中,我们访问i18n模型来从消息包文件中获取文本,并将占位符{0}替换为数据模型中的接收方。getProperty方法可以在任何模型中调用,并将数据路径作为参数。此外,资源包具有一个特定的getText方法,该方法将字符串数组作为第二个参数。
可以使用ResourceModel的getResourceBundle方法访问资源包。与手工连接可翻译文本不同,我们可以使用getText的第二个参数用非静态数据替换部分文本。在运行时,SAPUI5试图加载正确的i18n_*。基于浏览器设置和区域设置的属性文件。在我们的例子中,我们只创建了一个i18n.properties文件使其更简单。但是,您可以从浏览器开发工具的网络流量中看到,SAPUI5试图加载一个或多个i18n_*.properties文件,然后返回到默认的i18n.属性文件。
webapp/view/App.view.xml
<mvc:View
controllerName="sap.ui.demo.walkthrough.controller.App"
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc">
<Button
text="{i18n>showHelloButtonText}"
press="onShowHello"/>
<Input
value="{/recipient/name}"
description="Hello {/recipient/name}"
valueLiveUpdate="true"
width="60%"/>
</mvc:View>
在XML视图中,我们使用数据绑定将按钮文本连接到i18n模型中的showHelloButtonText属性。资源包是平面结构,因此路径可以省略前面的斜杠(/)。
请注意:出于演示的目的,描述文本没有完全本地化。为了安全起见,我们必须使用与控制器类似的机制来使用资源包中的字符串并替换其中的部分。这可以用jQuery.sap完成。formatMessage格式化程序。此外,i18n文件只影响客户端应用程序文本。从后端系统加载的文本可以以后端系统支持的所有语言显示。
Conventions
▪用于国际化的资源模型称为i18n模型。
▪默认文件名是i18n.properties。
▪资源包键是用(较低的)camelCase编写的。
▪资源包值可以包含{0}、{1}、{2}、……
▪永远不要连接翻译后的字符串,总是使用占位符。
▪对特殊字符使用Unicode转义序列。
Parent topic: Walkthrough
Previous: Step 7: JSON Model
Next: Step 9: Component Configuration
Related Information
API Reference:jQuery.sap.util.ResourceBundle
API Reference:sap.ui.model.resource.ResourceModel
Samples:sap.ui.model.resource.ResourceModel
UI5-文档-4.8-Translatable Texts的更多相关文章
- ABP文档 - 本地化
文档目录 本节内容: 简介 应用语言 本地化源 XML文件 注册XML本地化源 JSOn文件 注册JSON本地化源 资源文件 自定义源 获取一个本地文本 在服务端 在MVc控制器里 在MVC视图里 在 ...
- [转]unity3d 脚本参考-技术文档
unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...
- ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...
- ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/ 谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三. ...
- 使用docx4j编程式地创建复杂的Word(.docx)文档
原文链接:Create complex Word (.docx) documents programatically with docx4j 原文作者:jos.dirksen 发表日期:2012年2月 ...
- SAP 常用增强记录文档
转自:http://blog.csdn.net/budaha 20170215需要一个PR 修改保存时候的增强,目的是同步PR的处理状态 EBAN-STATU 到一个自建表ZTPRTOPO,记得有个P ...
- python+selenium爬取百度文库不能下载的word文档
有些时候我们需要用到百度文库的某些文章时,却发现需要会员才能下载,很难受,其实我们可以通过爬虫的方式来获取到我们所需要的文本. 工具:python3.7+selenium+任意一款编辑器 前期准备:可 ...
- Web 通信技术 ——跨文档信息传输(JavaScript)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.html * 作者:常轩 * 微信公众号:Worldh ...
- javadoc导出成word文档
刚刚上次弄完了一个坑爹的任务,这次我领导又给我一个让人脑瓜子疼的任务了. 基本上客户他在验收我们系统的时候,都会要求我们编写相关的文档,这次也不例外. 只是这次的客户要求我们给出接口文档.不仅是要整个 ...
- C#给PDF文档添加文本和图片页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
随机推荐
- No result defined for action com.nynt.action.ManageAction and result input问题
No result defined for action com.nynt.action.ManageAction and result input 问题原因: 1). 在action类中定义的一个r ...
- C#中DateTime的缺陷 ---- 代替品DateTimeOffset
C#中的DateTime在逻辑上有个非常严重的缺陷: > var d = DateTime.Now; > var d2 = d.ToUniversalTime(); > d == d ...
- dkh人力资源大数据解决方案整体架构
大数据技术的应用正在潜移默化改变着我们的日常生活习惯和工作方式,很多看起来有点“不可思议”的事情也渐渐被我们“习以为常”.大数据可能在国内的起步较晚,但我们可能却是对大数据应用最好的了代表了.前些时候 ...
- IPv6调用java后端接口报错:java.net.SocketException: Protocol family unavailable
目前需求是java后端的接口需要支持IPv6.先确认linux机器已经绑定了IPv6: CMREAD-SV43 apache-tomcat/bin> ifconfig eth0 Link enc ...
- windows下使用vscode编写运行以及调试Python
更新于2018年10月: 首先去python官网下载python3 地址:https://www.python.org/downloads/windows/ 下载好后直接安装 记得勾选添加环境变量 ...
- EINTR与ERESTARTSYS
驱动中如果down_interruptible之类的函数被信号中断,驱动可以返回-EINTR或-ERESTARTSYS. 区别在于: 若返回-EINTR,应用程序执行的系统调用会返回表示错误的值,且e ...
- C/C++基础----泛型算法
算法不依赖与容器(使用迭代器),但大多数依赖于元素类型.如find需要==运算符,其他算法可能要求支持<运算符. 算法永远不会执行容器的操作,永远不会改变底层容器的大小(添加或删除元素). ac ...
- 【Spring学习笔记-MVC-17】Spring MVC之拦截器
作者:ssslinppp 1. 拦截器简介及应用场景 2. 拦截器接口及拦截器适配器 3. 运行流程图 正常运行 中断流程 4. 程序实例 控制层: @Controller @Reques ...
- Qt5布局管理(二)——QDockWidget停靠窗口类
转载:LeeHDsniper 停靠窗口类QDockWidget 实例效果 如右图所示,左半部分MainWindow是该窗口的中心窗口,右边的最下面两个停靠窗口可以跳出该窗口: 但是第一个停靠窗口只能停 ...
- linux下给php安装curl、gd(ubuntu)
安装方法很简单,只需要一条命令. # sudo apt-get install curl libcurl3 libcurl3-dev php5-curl 恭喜,PHP5 cURL安装完毕.记得重启Ap ...