локализация (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");