2017-01-23 131 views
0

我的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") 

現在,如果用戶打開同一日期選擇器,它正在以英文顯示,而不是德國,如果用戶打開另一個控件或日期選擇器,它以德語呈現。

頁面在更改應用程序中的語言時沒有刷新。 請給我一個解決方案,以動態更改控件的區域設置。

回答

1

也許我的回答here有一點幫助。

問題在於,在許多情況下,甚至在大多數情況下,標準UI5控件在加載時只檢測一次語言。很多時候,控制開發人員並沒有實現語言的「動態變化」。如果你檢查我上面提到的鏈接,你會發現有些方法可以對語言變化作出反應,但是很多時候這種情況並不是由於任何原因而實現的。

但是,我不敢告訴你,在你的情況下,標準控件可能不支持動態語言更改(但我沒有檢查代碼)。另外,似乎SAP的UI5人不認爲這是一個bug(請參閱此github issue)。這樣的可惜...

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

的信息進行解釋