我目前正在使用SAP UI5开发UI,并希望将其中的所有文本国际化。
这是我的.xml格式视图的一部分。使用{}括号中的占位符获取特定语言的文本在这里工作正常。
<headerToolbar>
<Toolbar>
<Title text="{i18n>orderDetails}"/>
</Toolbar>
</headerToolbar>
<columns>
<Column>
<Text text="{i18n>statisticsSubject}"/>
</Column>
<Column>
<Text text="{i18n>statisticsNumber}"/>
</Column>
</columns>
我在视图中也有一个Tile Container,它从.json文件中获取它的内容。
<TileContainer
tiles="{/Tiles}"
height="200pt">
<StandardTile
icon="{icon}"
type="{type}"
number="{number}"
numberUnit="{numberUnit}"
title="{title}"
info="{info}"
infoState="{infoState}"/>
</TileContainer>
这是.json文件的相关部分:
"Tiles":
[
{
"title":"Anmelden",
"icon":"sap-icon://inspect"
},
{
"title":"Abmelden",
"icon":"sap-icon://inspect-down"
},
{
"title":"Liste",
"icon":"sap-icon://activity-items"
}
],
由于瓷砖的标题目前只有德国版,我还想通过使用i18n将它们国际化。当我在{}括号中将标题更改为占位符时,我只能在最终的UI结果中看到占位符,而不是相应的翻译。是否有可能在.json文件中使用i18n或者我是否需要找到一种不同的解决方案来存储瓷砖的数据?
提前致谢!
答案 0 :(得分:0)
没有内置机制可以使用JsonModel对JSON文件进行国际化。但这并不意味着你不能自己制作一个。您可以在此处找到示例:https://github.com/serban-petrescu/serban-petrescu.github.io/blob/master/model/models.js#L53。
简而言之,您必须首先使用jQuery.ajax读取JSON。收到数据后,您可以检查以下3种情况:
i18n>myTranslatableKey
),那么您将用i18n包中的文本替换该字符串。您可以在适当的位置进行这些更改(即链接从jQuery.ajax调用中收到的对象),也可以创建对象的副本(如上例所示)。
另一种可能性(不太好)是使用factory function而不是使用XML中的模板绑定聚合。在工厂功能中,您必须实例化您的瓷砖,并且您可以按照以下方式执行操作:
buildTile: function(sId, oContext) {
return new StandardTile({
icon: "{icon}",
type: "{type}",
number: "{number}",
numberUnit: "{numberUnit}",
info: "{info}",
infoState: "{infoState}",
// if title is {i18n>someKey} it will bind the
// title property against the i18n model
title: oContext.getProperty("title")
});
}