在应用程序中动态更改 SAP ui5 应用程序区域设置



我的网络应用程序中有两种不同的语言,即英语和德语,用户可以通过选择框更改应用程序中的语言。最初,我从后端获得首选语言,并且我正在设置核心的区域设置,如下所示。

sap.ui.getCore().getConfiguration().setLanguage("//according to whatever is coming from back-end")

现在假设初始语言是英语,如果用户打开一个控件,即 sap.m.datepicker,日历将以英语显示。如果用户从应用程序将语言更改为德语,我将再次更改核心中的语言,如下所示:

sap.ui.getCore().getConfiguration().setLanguage("de-DE")
现在,如果用户打开相同的日期选取器,

它将以英语而不是德语显示,如果用户打开另一个控件或日期选取器,它将以德语呈现。

应用程序中更改语言时,页面未刷新。请向我建议一个动态更改控件区域设置的解决方案。

也许我在这里的回答会有所帮助。

问题在于,在许多情况下,甚至在大多数情况下,标准 UI5 控件在加载时只检测一次语言。很多时候,控件开发人员没有实现语言的"动态更改"。如果您检查我上面提到的链接,您会发现有一些方法可以对语言更改做出反应,但通常出于任何原因都没有实现。

但是,我不敢告诉您,在您的情况下,标准控件可能不支持开箱即用的动态语言更改(但我没有检查代码)。此外,SAP的UI5人员似乎不认为这是一个错误(请参阅此github问题)。真可惜...

我建议您使用sap.ui.core.Core.attachLocalizationChanged(fnFunction, oListener)并将其添加到控制器的onInit函数中。

由此,在fnFunction重新生成需要区域设置更改是动态的控件。

例:

onInit: function(oEvent) {
    sap.ui.getCore().attachLocalizationChanged(this._handleLocalizationChanged, this);
},
_handleLocalizationChanged: function() {
    // ... Some logic to re-build / set locale for the dynamic controls.
}

这是我根据 API 中的信息对应该做什么的解释

最新更新