绑定语言不起作用

时间:2015-02-10 16:24:29

标签: xml internationalization sapui5

我创建了我的.properties文件(它,en,fr)并设置了i18n模型

    var oI18nModel = new sap.ui.model.resource.ResourceModel({
        bundleUrl: "i18n/i18n.properties"
    });
    sap.ui.getCore().setModel(oI18nModel, "i18n");
    this.setModel(oI18nModel, "i18n");

我的应用程序在意大利语中正确启动现在我有一个切换到en语言的按钮。这是代码:

   var bundleLocale=sap.ui.getCore().getModel("i18n").getProperty("/bundleLocale/");
   bundleLocale="en";
   sap.ui.getCore().getModel("i18n").refresh(true);

但视图没有改变......

为什么?

开始时,i18n型号包含:

bundleUrl= "i18n/i18n.properties"

之后我执行此代码:

i18nModel = new sap.ui.model.resource.ResourceModel({
                bundleUrl    : "i18n/i18n.properties",
                bundleLocale : "fr"
            });
            sap.ui.getCore().setModel(i18nModel, "i18n");

,模型现在包含

bundleUrl= "i18n/i18n.properties"
bundleLocale="fr"

相反,如果我使用此代码:

sap.ui.getCore().getConfiguration().setLanguage("fr")

i18n型号没有改变

在这两种情况下我的观点都没有改变

2 个答案:

答案 0 :(得分:2)

在您的代码中,您从资源包中获取属性(即其中一个翻译),而不是实际的区域设置 此外,您正在设置变量bundleLocale,但您从不使用该变量...

设置应用程序语言的正确方法是使用sap.ui.core.Configuration setLanguage()方法(请参阅https://sapui5.netweaver.ondemand.com/sdk/docs/api/symbols/sap.ui.core.Configuration.html#setLanguage

作为替代方案,请使用您的资源模型提供区域设置:

setLanguage : function(sLanguage) {
    i18nModel = new sap.ui.model.resource.ResourceModel({
        bundleUrl    : "i18n/i18n.properties", 
        bundleLocale : sLanguage
    });
    sap.ui.getCore().setModel(i18nModel, "i18n");
}

编辑:请参阅此工作示例http://plnkr.co/edit/pj6Ze1D60lrXQ47peowT?p=preview

使用视图中的开关在德语和英语UI语言之间切换

答案 1 :(得分:0)

我已经解决了我的问题! 在我的Component.js中,我写了init函数:

    var oI18nModel = new sap.ui.model.resource.ResourceModel({
        bundleUrl: "i18n/i18n.properties"
    });
    sap.ui.getCore().setModel(oI18nModel, "i18n");
    this.setModel(oI18nModel, "i18n");

并在createContent函数中写过:

    // create root view
    var oView = sap.ui.view({
        id: "app",
        viewName: "stg.view.App",
        type: "JS",
        viewData: {
            component: this
        }
    });

当我想改变我写的语言时:

        var i18nModel = new sap.ui.model.resource.ResourceModel({
            bundleUrl    : "i18n/i18n.properties",
            bundleLocale :  sBundleLocale
        });
        sap.ui.getCore().setModel(i18nModel , "i18n");

但在这种模式下,我没有看到任何变化。 现在我写

var oApp = sap.ui.getCore().byId("app");
oApp.getViewData().component.setModel(i18nModel, "i18n");

它有效!!