我正在寻找一种方法来“完全”更改SAPUI5中使用的语言。 使用属性文件更改语言似乎不是问题,一个工作示例:
new sap.m.Switch({
state : false,
customTextOn : "EN",
customTextOff : "DE",
visible : true,
change : [ function(oEvent) {
var control = oEvent.getSource();
var state = control.getState();
if (state) {
i18nModel = new sap.ui.model.resource.ResourceModel({bundleUrl:"i18n/i18n.properties", bundleLocale:"en"});
sap.ui.getCore().setModel(i18nModel, "i18n");
} else {
i18nModel = new sap.ui.model.resource.ResourceModel({bundleUrl:"i18n/i18n.properties", bundleLocale:"de"});
sap.ui.getCore().setModel(i18nModel, "i18n");
}
}, this ]
}),
按开关按钮将立即更改绑定到“i18n>”的文本模型。 问题是,我也有来自oData服务的元数据(特别是标签)的文本。
绑定路径可能如下所示:
{modelName>/#Entity/Attribute/@sap:label}
首次登录时定义了此语言。现在我正在寻找一种在语言更改后重新加载元数据(以及数据)的方法。
有没有办法这样做?或者是退出并再次登录的唯一方法?
答案 0 :(得分:2)
您可能需要重新启动ODataModel
var oModel = new sap.ui.model.odata.ODataModel("/your_odata_service",
{metadataUrlParams:{"sap-language":"de"}}
);
这样,它会再次通过OData
检索德语的$metadata?sap-language=de
元数据。
它刚刚脱离我的脑海。你可以尝试一下。
答案 1 :(得分:1)
谢谢!我有一个问题需要更改smartforms / smartfields用于标签的语言,因为我无法控制在metadata.xml文件中声明标签的语言。艾伦解决方案为我工作!我正在使用SAP Web IDE并且我更改了manifest.json文件,添加此行是原则或主要(无名,“”)模型定义:
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "mpo.i18n.i18n"
}
},
"": {
"dataSource": "mainService",
"settings": {
"defaultBindingMode": "TwoWay",
"metadataUrlParams": {
"sap-documentation": "heading",
"sap-language": "en"
}
},
谢谢艾伦!
答案 2 :(得分:0)
艾伦几乎是对的。
为了使用额外的sap-language
参数重新加载元数据文件,您需要先破坏模型,然后reinit
新模型。重要的是,您没有相同服务的任何其他ODataModel
实例。
this.getModel().destroy();
var oModel = new sap.ui.model.odata.v2.ODataModel("/youService", {
metadataUrlParams: {"sap-language":"de"}
});