diff --git a/demo/index.html b/demo/index.html
index 05ff56d..df6f9a7 100644
--- a/demo/index.html
+++ b/demo/index.html
@@ -28,7 +28,7 @@
window.intl = { ...common, ...dateTime, ...fileSize, ...list, ...number, ...localize };
render(
- common.supportedLocalesDetails.map(({ code, name }) => html``),
+ common.supportedLocalesDetails.map(({ code, localName }) => html``),
document.querySelector('#languages')
);
@@ -57,6 +57,7 @@
Usage
const htmlLangInput = document.getElementById('html-lang');
document.getElementById('apply-lang').onclick = () => {
+ debugger;
htmlElement.lang = htmlLangInput.value;
};
diff --git a/lib/common.js b/lib/common.js
index 1dc93c7..c001874 100644
--- a/lib/common.js
+++ b/lib/common.js
@@ -1,6 +1,14 @@
export const defaultLocale = 'en';
export const supportedBaseLocales = ['ar', 'cy', 'da', 'de', 'en', 'es', 'fr', 'haw', 'hi', 'ja', 'ko', 'mi', 'nl', 'pt', 'sv', 'tr', 'zh'];
export const supportedLangpacks = ['ar', 'cy', 'da', 'de', 'en', 'en-gb', 'es', 'es-es', 'fr', 'fr-fr', 'fr-on', 'haw', 'hi', 'ja', 'ko', 'mi', 'nl', 'pt', 'sv', 'tr', 'zh-cn', 'zh-tw'];
+
+function updateLocalNames() {
+ const localName = new Intl.DisplayNames(documentLocaleSettings.language || navigator.language, { type: 'language' });
+ supportedLocalesDetails.forEach(l => {
+ l.localName = localName.of(l.overrideCode || l.code);
+ });
+}
+
export const supportedLocalesDetails = [
{ code: 'ar-sa', dir: 'rtl', name: 'العربية (المملكة العربية السعودية)' },
{ code: 'cy-gb', dir: 'ltr', name: 'Cymraeg (Y Deyrnas Unedig)' },
@@ -10,10 +18,10 @@ export const supportedLocalesDetails = [
{ code: 'en-gb', dir: 'ltr', name: 'English (United Kingdom)' },
{ code: 'en-us', dir: 'ltr', name: 'English (United States)' },
{ code: 'es-es', dir: 'ltr', name: 'Español (España)' },
- { code: 'es-mx', dir: 'ltr', name: 'Español (Latinoamérica)' },
+ { code: 'es-mx', overrideCode: 'es-419', dir: 'ltr', name: 'Español (Latinoamérica)' },
{ code: 'fr-ca', dir: 'ltr', name: 'Français (Canada)' },
{ code: 'fr-fr', dir: 'ltr', name: 'Français (France)' },
- { code: 'fr-on', dir: 'ltr', name: 'Français (Ontario)' },
+ { code: 'fr-on', overrideCode: 'fr-CA-Ontario' , dir: 'ltr', name: 'Français (Ontario)' },
{ code: 'haw-us', dir: 'ltr', name: 'ʻŌlelo Hawaiʻi (ʻAmelika Hui Pū ʻIa)' },
{ code: 'hi-in', dir: 'ltr', name: 'हिंदी (भारत)' },
{ code: 'ja-jp', dir: 'ltr', name: '日本語 (日本)' },
@@ -23,8 +31,8 @@ export const supportedLocalesDetails = [
{ code: 'pt-br', dir: 'ltr', name: 'Português (Brasil)' },
{ code: 'sv-se', dir: 'ltr', name: 'Svenska (Sverige)' },
{ code: 'tr-tr', dir: 'ltr', name: 'Türkçe (Türkiye)' },
- { code: 'zh-cn', dir: 'ltr', name: '中文(简体)' },
- { code: 'zh-tw', dir: 'ltr', name: '中文(繁体)' }
+ { code: 'zh-cn', overrideCode: 'zh-hans', dir: 'ltr', name: '中文(简体)' },
+ { code: 'zh-tw', overrideCode: 'zh-hant', dir: 'ltr', name: '中文(繁体)' }
];
export const supportedLocales = supportedLocalesDetails.map((l) => l.code);
@@ -225,3 +233,8 @@ export function getDocumentLocaleSettings() {
}
return documentLocaleSettings;
}
+
+(() => {
+ getDocumentLocaleSettings().addChangeListener(updateLocalNames);
+ updateLocalNames();
+})()