No exemplo abaixo existem dois botões, cada um com a bandeira do idioma e ambos chamam o método changeLanguage.
<headerContent>
<Image src="{ value: 'exakta/tim/Beneflex/img/United-States.png', formatter: 'sap.ui.require.toUrl' }" press="changeLanguage('en_US')" tooltip="English"/>
<Image src="{ value: 'exakta/tim/Beneflex/img/Brazil.png', formatter: 'sap.ui.require.toUrl' }" press="changeLanguage('pt_BR')" tooltip="Português"/>
</headerContent>
Logo na inicialização o método já é chamado e tenta recuperar o parâmetro sap-language diretamente na URL. Caso não exista, o código vai definir a língua para o idioma que receberá por parâmetro.
<aside>
💡 O comando window.location.search atualizará a página.
</aside>
onInit: function () {
this.changeLanguage();
},
changeLanguage: function (language) {
if (window.location.search.match("sap-language") || language) {
let urlObject = this.getUrlAsObject(window.location.search.slice(1));
if (language) {
if (language === urlObject["sap-language"])
return; // Idioma recebido dos botões é o atual. Não fazer nada
urlObject["sap-language"] = language;
window.location.search = `?${this.getObjectAsUrl(urlObject)}`;
}
sap.ui.getCore().getConfiguration().applySettings({
language: urlObject["sap-language"]
});
sap.ui.getCore().getConfiguration().setLanguage(urlObject["sap-language"]);
}
},
getUrlAsObject: function (url) {
url = url.replace("%20", " ");
var jsonObj = {};
var sep = url.split("&");
for (var i = 0; i < sep.length; i++) {
var getVals = sep[i].split("=");
jsonObj[getVals[0]] = getVals[1];
}
return jsonObj;
},
getObjectAsUrl: function (object) {
return Object.keys(object).map(function (k) {
return k + "=" + object[k];
}).join("&");
}