Skip to content

Conversation

@ilhan007
Copy link
Contributor

@ilhan007 ilhan007 commented Oct 8, 2020

When there is a component that uses CLDR and someone calls setLanguage,
this causes the webcomponents to re-render and recalculate their state and it turns out that the CLDR for the newly set language is missing and JS error is thrown ("Error: CLDR data for locale de is not loaded").
Currently, this can be seen in our "RTL.html" page, if we add a DatePicker and then use the buttons on the page to change the language. This PR ensures that upon setLanguage, the CLDR is fetched/updated before the re-rendering.
On the other hand, there is applyDirection API that also force re-rendering, that if used together with setLanguage, should wait for the setLanguage to complete to allow the message bundles (although they won't fail with JS error) and CLDR to load.

setLanguage(lang).then(function() {
		document.body.dir = dir;
		window['sap-ui-webcomponents-bundle'].applyDirection();
});

@ilhan007 ilhan007 requested a review from vladitasev October 8, 2020 13:22
@ilhan007 ilhan007 merged commit f9b9ead into master Oct 8, 2020
@ilhan007 ilhan007 deleted the fix-setLanguage-API branch October 8, 2020 15:30
ilhan007 added a commit that referenced this pull request Oct 17, 2020
When there is a component that uses CLDR and someone calls **setLanguage**,
this causes the webcomponents to re-render and recalculate their state and it turns out that the CLDR for the newly set language is missing and JS error is thrown ("Error: CLDR data for locale de is not loaded").
Currently, this can be seen in our "RTL.html" page, if we add a DatePicker and then use the buttons on the page to change the language. This PR ensures that upon setLanguage, the CLDR is fetched/updated before the re-rendering.
On the other hand, there is **applyDirection** API that also force re-rendering, that if used together with setLanguage, should wait for the setLanguage to complete to allow the message bundles (although they won't fail with JS error) and CLDR to load.
ilhan007 added a commit that referenced this pull request Nov 11, 2020
When there is a component that uses CLDR and someone calls **setLanguage**,
this causes the webcomponents to re-render and recalculate their state and it turns out that the CLDR for the newly set language is missing and JS error is thrown ("Error: CLDR data for locale de is not loaded").
Currently, this can be seen in our "RTL.html" page, if we add a DatePicker and then use the buttons on the page to change the language. This PR ensures that upon setLanguage, the CLDR is fetched/updated before the re-rendering.
On the other hand, there is **applyDirection** API that also force re-rendering, that if used together with setLanguage, should wait for the setLanguage to complete to allow the message bundles (although they won't fail with JS error) and CLDR to load.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants