использование текстов i18n для определения размеров визфреймов и определения измерений

#sapui5

Вопрос:

Я использую визфрейм круговой диаграммы и хочу сделать его переводимым.
—> тексты i18n>
В справочнике API для определения измерений и определения размеров написано

имя : Название меры, отображаемое на диаграмме

Таким образом, имя-это свойство, которое определяет, как называются мои Мера и измерение.
Если я использую жесткую строку, это работает.
Если я использую текст i18n, это не так.
Я думаю, это потому values , что свойство элемента FeedItem, по-видимому, должно совпадать name с мерой и измерением свойства. Но это только предположение из того, что я вижу в образцах демонстрационного комплекта…

Кто-нибудь знает, как я могу использовать тексты i18n в VizFrame?

Код:

 <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>
 

Ошибка:

Не пойманный (в обещании) Ошибка: «продажи» имеет тип string, ожидается, что любой[] для свойства «значения» элемента sap.viz.ui5.controls.common.корма.Элемент питания#__элемент4

Ответ №1:

Вы правы насчет FeedItem этого . Недвижимость values должна соответствовать вашим размерам/размерам.

Вот как вы можете передать свой переводимый текст в виде массива строк, а не просто простой строки (используя трюк, известный как привязка выражений):

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

После этого сообщение об ошибке должно исчезнуть, и ваша диаграмма будет содержать переведенную метку оси

Вы даже можете вызывать формататоры таким образом

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

Ответ №2:

Ну, одним из способов может быть использование фабрики для соответствующей агрегации. На заводе вы можете клонировать какой-либо элемент шаблона, и вместо текста привязки вы можете динамически назначить «жесткий», например:

 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
}
 

Комментарии:

1. как вы используете заводские функции для агрегирования в xml?

2. Функция фабрики-это функция, которая создает элементы для привязки агрегации. Даже сейчас вы используете один из них — по умолчанию. Вы можете переопределить его в xml. Обратитесь к этому образцу для получения более подробной информации: sapui5.hana.ondemand.com/sdk/#/topic/…