локализация (i18n) в sapui5 для фрагмента.xml-файл не отображается
у меня есть кнопка (создать приложение), если я нажму на кнопку, появится фрагментированный диалог . здесь я могу показать фрагментированный диалог .но интернализация (i18n) не появляется для полей. (Ибо xml
файлы, способные показать i18n
но fragment.xml
файл не в состоянии показать i18n
/)
component.js
:
createContent : function() {
// create root view
var oView = sap.ui.view({
id : "app",
viewName : "sap.gss.program.view.App",
type : "JS",
viewData : { component : this }
});
var i18nModel = new sap.ui.model.resource.ResourceModel({
bundleUrl : "i18n/appTexts_fr.properties"
});
oView.setModel(i18nModel, "i18n");
return oView;
}
Controller.js
:
createApplication: function (oEvent) {
if (!this.oDialogFragment) {
this.oDialogFragment = sap.ui.xmlfragment("sap.gss.program.view.myFragment",
this);
}
this.oDialogFragment.open();
}
fragment.xml
:
<core:FragmentDefinition
xmlns="sap.m"
xmlns:core="sap.ui.core"
xmlns:app="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1">
<Dialog
title="{i18n>Title}"
class="sapUiPopupWithPadding" >
<HBox>
<Text text="{i18n>Description_TEXT}" > </Text>
</HBox>
<beginButton>
<Button text="{i18n>Ok}" press="DialogButton" />
</beginButton>
<endButton>
<Button text="{i18n>Cancel}" press="CloseButton" />
</endButton>
</Dialog>
</core:FragmentDefinition>
4 ответов
вы также должны установить модель ресурсов i18n для фрагмента диалога.
createApplication: function(oEvent) {
if (!this.oDialogFragment) {
this.oDialogFragment = sap.ui.xmlfragment("sap.gss.program.view.myFragment", this);
var i18nModel = new sap.ui.model.resource.ResourceModel({
bundleUrl : "i18n/appTexts_fr.properties"
});
this.oDialogFragment.setModel(i18nModel, "i18n");
}
this.oDialogFragment.open();
}
можно использовать dependents
агрегация, чтобы подключить диалоговое окно к представлению; вам не нужно явно устанавливать какие-либо модели.
Так что в вашем случае вы могли бы сделать это:
createApplication: function (oEvent) {
if (!this.oDialogFragment) {
this.oDialogFragment = sap.ui.xmlfragment("sap.gss.program.view.myFragment", this);
}
this.getView().addDependent(oDialogFragment); // <--
this.oDialogFragment.open();
}
посмотреть мой ответ: to'каково использование агрегации "иждивенцев" в SAPUI5? ' для получения более подробной информации.
его часто самый простой способ esp. для ResourceModel
чтобы просто установить его в глобальном масштабе:
sap.ui.getCore().setModel(i18nModel, "i18n");
теперь вы можете ссылаться на него отовсюду в своем приложении и привязываться к нему, как и раньше, не нужно снова устанавливать его на уровне просмотра или даже управления.
У меня была такая же проблема, поэтому модель установки в компоненте глобально и локально. Он работает правильно.
sap.ui.getCore().setModel(i18nModel, "i18n");
this.setModel(i18nModel, "i18n");