在这一步中,我们将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

Resource Model

API Reference:jQuery.sap.util.ResourceBundle

API Reference:sap.ui.model.resource.ResourceModel

Samples:sap.ui.model.resource.ResourceModel

UI5-文档-4.8-Translatable Texts的更多相关文章

  1. ABP文档 - 本地化

    文档目录 本节内容: 简介 应用语言 本地化源 XML文件 注册XML本地化源 JSOn文件 注册JSON本地化源 资源文件 自定义源 获取一个本地文本 在服务端 在MVc控制器里 在MVC视图里 在 ...

  2. [转]unity3d 脚本参考-技术文档

    unity3d 脚本参考-技术文档 核心提示:一.脚本概览这是一个关于Unity内部脚本如何工作的简单概览.Unity内部的脚本,是通过附加自定义脚本对象到游戏物体组成的.在脚本对象内部不同志的函数被 ...

  3. ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)

    本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...

  4. ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料

    本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/  谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三. ...

  5. 使用docx4j编程式地创建复杂的Word(.docx)文档

    原文链接:Create complex Word (.docx) documents programatically with docx4j 原文作者:jos.dirksen 发表日期:2012年2月 ...

  6. SAP 常用增强记录文档

    转自:http://blog.csdn.net/budaha 20170215需要一个PR 修改保存时候的增强,目的是同步PR的处理状态 EBAN-STATU 到一个自建表ZTPRTOPO,记得有个P ...

  7. python+selenium爬取百度文库不能下载的word文档

    有些时候我们需要用到百度文库的某些文章时,却发现需要会员才能下载,很难受,其实我们可以通过爬虫的方式来获取到我们所需要的文本. 工具:python3.7+selenium+任意一款编辑器 前期准备:可 ...

  8. Web 通信技术 ——跨文档信息传输(JavaScript)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.html * 作者:常轩 * 微信公众号:Worldh ...

  9. javadoc导出成word文档

    刚刚上次弄完了一个坑爹的任务,这次我领导又给我一个让人脑瓜子疼的任务了. 基本上客户他在验收我们系统的时候,都会要求我们编写相关的文档,这次也不例外. 只是这次的客户要求我们给出接口文档.不仅是要整个 ...

  10. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

随机推荐

  1. smarty学习——变量调节器(过滤器)

    变量调节器用于变量,自定义函数和字符串. 请使用 | 符号和调节器名称应用调节器.变量调节器由赋予的参数值决定其行为.参数由:符号分开. 比如进行大写转换的: upper demo: <br&g ...

  2. 彻底删除vscode及安装的插件和个人配置信息

    1.卸载vscode应用软件(在控制面板里面找不到改软件,所以只能进入应用所在文件夹进行卸载) ## 此步骤虽然删掉了应用软件,但是此时重新安装会发现之前下载的插件和个人配置信息都还会重新加载出来,所 ...

  3. JavaScript中类似PHP的uniqid()方法

    JavaScript中类似PHP的uniqid()方法: function generateUIDNotMoreThan1million() { return ("0000" + ...

  4. Java 虚拟机(JVM)

    java 中的 JIT (Just in time) compiler:即时编译器.

  5. POJ1639顶点度限制最小生成树

    题目:http://poj.org/problem?id=1639 见汪汀的<最小生成树问题的拓展>. 大体是先忽略与根节点相连的边,做一遍kruscal,得到几个连通块和一个根节点: 然 ...

  6. Servlet是单例的吗?

    如题,是吗?首先我们得搞清楚啥是单例.一聊起单例,条件反射的第一个想到的自然是单例模式.单例模式的定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供.如果按照Java中单例的定义,那么当Ser ...

  7. windows 2008R2 iis7 +php web环境安装

    windows 2008R2 iis7 +php web环境安装 编写人:左丘文 2016-01-24 近来由于在架构一个discuz x3.2的PHP论坛,因此查找了一些有关环境架构的相关资料,在此 ...

  8. 【EasyUI学习-3】Easyui tabs入门实践

    作者:ssslinppp       1. 摘要 一般我们在设计程序主框架的时候,当点击(子)菜单时,希望相应界面都在tabs页中显示: 在显示的时候,如果之前打开过该界面,则希望重新选中对应的tab ...

  9. python给字典排序

    应用场景: 统计一篇文章中单词的出现频率,然后进行排序 利用sorted函数,返回一个已经排序好的list,但不改变原来的数据结构 In [1]: dt = {'a':3,'b':2,'c':1} I ...

  10. Makefile | Linux嵌入式编程 使用详细图解

    针对的是对Makefile一点都不会的小白哦! 练习之前我们要做好准备: (1):第一步创建一个目录,因为实验过程中生成的文件会很多,不要把你系统里的文件搞得乱七八糟. [cjj@bogon ~]$ ...