No exemplo abaixo existem dois botões, cada um com a bandeira do idioma e ambos chamam o método changeLanguage.

View

<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>

Controller

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("&");
}