将国际化文本用于 VizFrames DimensionDefinition 和 MeasureDefinition

using i18n Texts for VizFrames DimensionDefinition and MeasureDefinition

我正在使用饼图 vizFrame 并希望使其可翻译。
--> i18n 文本
在 API 中,MeasureDefinition 和 DimensionDefinition 的参考被写入

name : Name of the measure as displayed in the chart

所以名称是 属性,它决定了我的度量和维度的命名方式。
如果我使用硬弦,它会起作用。
如果我使用 i18n 文本,它不会。
我想是因为 FeedItem 的 values 属性 貌似需要和 name 属性 Measure 和 Dimension 一样。但这只是我在演示套件样本中看到的猜测...

有谁知道如何在 VizFrame 中使用 i18n 文本?

代码:

<viz.data:dimensions>
    <viz.data:DimensionDefinition name="{i18n>material}"
        value="{odataModel>MaterialText}" />
</viz.data:dimensions>
<viz.data:measures>
    <viz.data:MeasureDefinition name="{i18n>sales}"
        value="{odataModel>Sales}" />
</viz.data:measures>

错误:

Uncaught (in promise) Error: "sales" is of type string, expected any[] for property "values" of Element sap.viz.ui5.controls.common.feeds.FeedItem#__item4

嗯,一种方法是使用工厂进行相应的聚合。在工厂中,您可以克隆一些模板项,而不是绑定文本,您可以动态分配 'hard' 一个,例如:

myDimensionFactory: function(sId, oContext){
    const oBundle = this.getModel('i18n').getResourceBundle();       
    return this.byId('templateItemId').clone(sId)
               .setName(oBundle.getText('sales'));
                   //or whatever you need translated, 
                   //you can also use oContext if you want to translate something from the model
}

关于 FeedItem 你说得对。 属性 values 必须与您的 dimensions/measures.

匹配

以下是如何将可翻译文本作为字符串数组传递,而不仅仅是一个简单的字符串(使用技巧 ExpressionBinding):

<viz.feeds:FeedItem uid="..."
    type="Dimension"
    values="{= [${i18n>material}] }" />

此后错误消息应该消失,您的图表将包含一个翻译后的轴标签

您甚至可以通过这种方式调用格式化程序

<viz.feeds:FeedItem uid="valueAxis"
    type="Measure"
    values="{= [${ path: 'viewModel>/propertyOfViewModel', formatter: 'Formatter.formatStuff' }] }" />