我的网络应用程序中有两种不同的语言,即英语和德语,用户可以通过选择框更改应用程序中的语言。最初我从后端获得首选语言,我正在设置核心的语言环境,如下所示。
sap.ui.getCore().getConfiguration().setLanguage("//according to whatever is coming from back-end")
现在可以说初始语言是英语,如果用户打开一个控件,即sap.m.datepicker,日历将以英语显示。如果用户将语言从应用程序更改为德语,我将再次更改核心中的语言,如下所示:
sap.ui.getCore().getConfiguration().setLanguage("de-DE")
现在,如果用户打开相同的日期选择器,它将以英语而不是德语显示,如果用户打开另一个控件或日期选择器,则会以德语呈现。
在更改应用中的语言时,页面未刷新。 请建议我动态更改控件的区域设置的解决方案。
答案 0 :(得分:1)
也许我的回答here有点帮助。
问题在于,在许多情况下,甚至在大多数情况下,标准UI5控件只有在加载时才会检测一次语言。通常,控件开发人员没有实现该语言的“动态变化”。如果你检查我上面提到的链接,你会发现有很多方法可以对语言的变化做出反应,但是很多时候这种方法都没有实现。
但是,我不敢告诉你,在你的情况下,标准控件可能不支持开箱即用的动态语言更改(但我没有检查代码)。此外,似乎SAP的UI5人员并不认为这是一个错误(请参阅此github issue)。真可惜......
答案 1 :(得分:0)
我建议您使用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
中的信息对应该做什么的解释