绑定语言不起作用

Binding language not work

我创建了我的 .properties 文件(it、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 模型不变

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

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

设置应用程序语言的正确方法是使用 sap.ui.core.ConfigurationsetLanguage() 方法(参见 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 语言

我的问题已经解决了! 在我的 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");

有效!!