chore(localize): deprecate language-only locales
This commit is contained in:
parent
70e45772f8
commit
c1e96f79e2
6 changed files with 33 additions and 2 deletions
|
|
@ -19,7 +19,7 @@ storiesOf('Forms|Input Email', module)
|
||||||
)
|
)
|
||||||
.add('Use own validator', () => {
|
.add('Use own validator', () => {
|
||||||
const gmailOnly = modelValue => ({ gmailOnly: modelValue.indexOf('gmail.com') !== -1 });
|
const gmailOnly = modelValue => ({ gmailOnly: modelValue.indexOf('gmail.com') !== -1 });
|
||||||
localize.locale = 'en';
|
localize.locale = 'en-GB';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
localize.addData('en', 'lion-validate+gmailOnly', {
|
localize.addData('en', 'lion-validate+gmailOnly', {
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,8 @@ We chose `Intl MessageFormat` as a format for translation parts because:
|
||||||
|
|
||||||
### Fallbacks
|
### Fallbacks
|
||||||
|
|
||||||
|
> Important: language-only locales are now deprecated, and cause a warning. This is because language only locales cause bugs with date and number formatting. It also makes writing locale based tooling harder and more cumbersome. Usage is highly discouraged.
|
||||||
|
|
||||||
We decided to have a fallback mechanism in case a dialect (e.g. `nl-NL.js`) is not defined, but generic language (e.g. `nl.js`) is, because we wanted to support legacy applications which used [Polymer's AppLocalizeBehavior](https://polymer-library.polymer-project.org/3.0/docs/apps/localize) and could not instantly switch to using full dialects.
|
We decided to have a fallback mechanism in case a dialect (e.g. `nl-NL.js`) is not defined, but generic language (e.g. `nl.js`) is, because we wanted to support legacy applications which used [Polymer's AppLocalizeBehavior](https://polymer-library.polymer-project.org/3.0/docs/apps/localize) and could not instantly switch to using full dialects.
|
||||||
|
|
||||||
We decided to have a fallback locale (`en-GB` by default):
|
We decided to have a fallback locale (`en-GB` by default):
|
||||||
|
|
|
||||||
|
|
@ -177,6 +177,8 @@ Due to the need to develop application code with not everything translated (yet)
|
||||||
By default the fallback is `en-GB`, meaning that if some namespace does not have data for the current page locale, the `en-GB` will be loaded, making it an important foundation for all other locales data.
|
By default the fallback is `en-GB`, meaning that if some namespace does not have data for the current page locale, the `en-GB` will be loaded, making it an important foundation for all other locales data.
|
||||||
In addition to that the fallback is a necessary mechanism to allow some features of the browsers like Google Chrome translate to work and use the same original data for translations into all not officially supported languages.
|
In addition to that the fallback is a necessary mechanism to allow some features of the browsers like Google Chrome translate to work and use the same original data for translations into all not officially supported languages.
|
||||||
|
|
||||||
|
> We highly discourage using fallback locales as a user, because it is bug-prone with things like date and number formatting. Please use full locales whenever possible.
|
||||||
|
|
||||||
### Rendering data
|
### Rendering data
|
||||||
|
|
||||||
When all necessary data are loaded and you want to show localized content on the page you need to format the data.
|
When all necessary data are loaded and you want to show localized content on the page you need to format the data.
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,14 @@ export class LocalizeManager extends LionSingleton {
|
||||||
document.documentElement.lang = value;
|
document.documentElement.lang = value;
|
||||||
this._setupHtmlLangAttributeObserver();
|
this._setupHtmlLangAttributeObserver();
|
||||||
|
|
||||||
|
if (!value.includes('-')) {
|
||||||
|
console.warn(`
|
||||||
|
Locale was set to ${value}.
|
||||||
|
Language only locales are deprecated, please use the full language locale e.g. 'en-GB' instead of 'en'.
|
||||||
|
See https://github.com/ing-bank/lion/issues/187 for more information.
|
||||||
|
`);
|
||||||
|
}
|
||||||
|
|
||||||
this._onLocaleChanged(value, oldLocale);
|
this._onLocaleChanged(value, oldLocale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -302,6 +302,25 @@ describe('LocalizeManager', () => {
|
||||||
|
|
||||||
throw new Error('did not throw');
|
throw new Error('did not throw');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('throws a warning if the locale set by the user is not a full language locale', async () => {
|
||||||
|
const spy = sinon.spy(console, 'warn');
|
||||||
|
manager = new LocalizeManager();
|
||||||
|
manager.locale = 'nl';
|
||||||
|
|
||||||
|
expect(spy.callCount).to.equal(1);
|
||||||
|
console.warn.restore();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not throw a warning if locale was set through the html lang attribute', async () => {
|
||||||
|
const spy = sinon.spy(console, 'warn');
|
||||||
|
manager = new LocalizeManager();
|
||||||
|
document.documentElement.lang = 'nl';
|
||||||
|
await aTimeout(50); // wait for mutation observer to be called
|
||||||
|
|
||||||
|
expect(spy.callCount).to.equal(0);
|
||||||
|
console.warn.restore();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ describe('formatDate', () => {
|
||||||
day: '2-digit',
|
day: '2-digit',
|
||||||
locale: 'en-US',
|
locale: 'en-US',
|
||||||
};
|
};
|
||||||
localize.locale = 'bg';
|
localize.locale = 'bg-BG';
|
||||||
let date = parseDate('29-12-2017');
|
let date = parseDate('29-12-2017');
|
||||||
expect(formatDate(date)).to.equal('29.12.2017 г.');
|
expect(formatDate(date)).to.equal('29.12.2017 г.');
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue