2014-09-03 3 views
6

Ich habe eine Schaltfläche (Anwendung erstellen) Wenn ich auf eine Schaltfläche klicke, wird ein fragmentierter Dialog angezeigt. Hier kann ich einen fragmentierten Dialog zeigen. Aber die Internalisierung (i18n) erscheint nicht für die Felder. (Für xml Dateien können i18n zeigen, aber für fragment.xml Datei nicht in der Lage zu zeigen, i18n /)Lokalisierung (i18n) in sapui5 für fragment.xml Datei erscheint nicht

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> 

Antwort

3

sollten Sie das i18n-Ressourcenmodell für das Dialogfragment ebenfalls festlegen.

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(); 
} 
12

können Sie die dependents Aggregation verwenden, um den Dialog zu der Ansicht anzuschließen; Sie müssen keine Modelle explizit festlegen.

in Ihrem Fall also würden Sie dies tun:

createApplication: function (oEvent) { 
    if (!this.oDialogFragment) { 
     this.oDialogFragment = sap.ui.xmlfragment("sap.gss.program.view.myFragment", this); 
    } 
    this.getView().addDependent(oDialogFragment); // <-- 
    this.oDialogFragment.open(); 
} 

Siehe my answer zu 'What is the usage of "dependents" aggregation in SAPUI5?' für weitere Details.

1

Es ist oft der einfachste Weg esp. für ein ResourceModel es nur global gesetzt:

sap.ui.getCore().setModel(i18nModel, "i18n");

Jetzt können Sie es von überall in Ihrer Anwendung verweisen und daran binden, wie Sie keine Notwendigkeit, es auf view- taten, um jemals wieder eingestellt oder sogar Steuerungs- Niveau.

+0

Wenn Sie im Fiori Launchpad arbeiten, sollten Sie dies NICHT tun, da es Konflikte mit anderen Apps verursacht. – hirse

1

Ich hatte das gleiche Problem, so Setup-Modell in Component global und lokal. Es funktioniert korrekt.

sap.ui.getCore().setModel(i18nModel, "i18n"); 
this.setModel(i18nModel, "i18n");