在应用程序中动态更改sap ui5应用程序区域设置
问题描述:
我的web应用程序中有两种不同的语言,即英语和德语,用户可以通过选择框更改应用程序中的语言。最初我从后端获取首选语言,并且我正在设置核心的语言环境,如下所示。在应用程序中动态更改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")
现在,如果用户打开同一日期选择器,它正在以英文显示,而不是德国,如果用户打开另一个控件或日期选择器,它以德语呈现。
页面在更改应用程序中的语言时没有刷新。 请给我一个解决方案,以动态更改控件的区域设置。
答
也许我的回答here有一点帮助。
问题在于,在许多情况下,甚至在大多数情况下,标准UI5控件在加载时只检测一次语言。很多时候,控制开发人员并没有实现语言的“动态变化”。如果你检查我上面提到的链接,你会发现有些方法可以对语言变化作出反应,但是很多时候这种情况并不是由于任何原因而实现的。
但是,我不敢告诉你,在你的情况下,标准控件可能不支持动态语言更改(但我没有检查代码)。另外,似乎SAP的UI5人不认为这是一个bug(请参阅此github issue)。这样的可惜...
答
我建议你使用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
的信息进行解释