绑定语言不起作用
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.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 语言
我的问题已经解决了!
在我的 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");
有效!!
我创建了我的 .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.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 语言
我的问题已经解决了!
在我的 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");
有效!!