@pure-ds/core 0.7.37 → 0.7.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +77 -4
- package/dist/types/pds.d.ts +2 -0
- package/dist/types/public/assets/pds/components/pds-locale.d.ts +10 -0
- package/dist/types/public/assets/pds/components/pds-locale.d.ts.map +1 -0
- package/dist/types/src/js/common/localization-resource-provider.d.ts +2 -0
- package/dist/types/src/js/common/localization-resource-provider.d.ts.map +1 -1
- package/dist/types/src/js/common/localization.d.ts.map +1 -1
- package/dist/types/src/js/pds-core/pds-live.d.ts.map +1 -1
- package/package.json +1 -1
- package/public/assets/js/app.js +2 -2
- package/public/assets/js/pds-enhancers.js +1 -1
- package/public/assets/js/pds-localization.js +1 -1
- package/public/assets/js/pds-manager.js +11 -11
- package/public/assets/pds/components/pds-live-edit.js +11 -443
- package/public/assets/pds/components/pds-locale.js +1132 -0
- package/public/assets/pds/core/pds-enhancers.js +1 -1
- package/public/assets/pds/core/pds-localization.js +1 -1
- package/public/assets/pds/core/pds-manager.js +11 -11
- package/public/assets/pds/vscode-custom-data.json +10 -0
- package/src/js/common/localization-resource-provider.js +60 -15
- package/src/js/common/localization.js +26 -2
- package/src/js/pds-core/pds-live.js +4 -3
- package/src/js/pds.d.ts +2 -0
|
@@ -1631,459 +1631,27 @@ function setStoredConfig(nextConfig) {
|
|
|
1631
1631
|
} catch (e) {}
|
|
1632
1632
|
}
|
|
1633
1633
|
|
|
1634
|
-
function normalizeLocaleTag(locale) {
|
|
1635
|
-
return String(locale || "").trim().toLowerCase();
|
|
1636
|
-
}
|
|
1637
|
-
|
|
1638
|
-
let __startupLocalizationLocales = null;
|
|
1639
|
-
let __startupLocalizationLocalesPromise = null;
|
|
1640
|
-
|
|
1641
|
-
const LOCALE_PROBE_CANDIDATES = [
|
|
1642
|
-
"en", "nl", "de", "fr", "es", "it", "pt", "sv", "no", "da", "fi",
|
|
1643
|
-
"pl", "cs", "sk", "sl", "hu", "ro", "bg", "hr", "sr", "ru", "uk",
|
|
1644
|
-
"tr", "el", "he", "ar", "fa", "hi", "ja", "ko", "zh", "zh-cn", "zh-tw",
|
|
1645
|
-
];
|
|
1646
|
-
|
|
1647
|
-
function toBaseLocale(locale) {
|
|
1648
|
-
const normalized = normalizeLocaleTag(locale);
|
|
1649
|
-
if (!normalized) return "";
|
|
1650
|
-
return normalized.split("-")[0] || normalized;
|
|
1651
|
-
}
|
|
1652
|
-
|
|
1653
|
-
function isLocalizationActive() {
|
|
1654
|
-
const configLocalization =
|
|
1655
|
-
PDS?.currentConfig?.localization && typeof PDS.currentConfig.localization === "object"
|
|
1656
|
-
? PDS.currentConfig.localization
|
|
1657
|
-
: null;
|
|
1658
|
-
|
|
1659
|
-
const runtimeState =
|
|
1660
|
-
typeof PDS?.getLocalizationState === "function"
|
|
1661
|
-
? PDS.getLocalizationState()
|
|
1662
|
-
: null;
|
|
1663
|
-
|
|
1664
|
-
const hasRuntimeProvider = Boolean(runtimeState?.hasProvider);
|
|
1665
|
-
|
|
1666
|
-
const hasConfigProvider = Boolean(
|
|
1667
|
-
configLocalization?.provider ||
|
|
1668
|
-
typeof configLocalization?.translate === "function" ||
|
|
1669
|
-
typeof configLocalization?.loadLocale === "function" ||
|
|
1670
|
-
typeof configLocalization?.setLocale === "function"
|
|
1671
|
-
);
|
|
1672
|
-
|
|
1673
|
-
const hasConfigMessages = Boolean(
|
|
1674
|
-
configLocalization?.messages &&
|
|
1675
|
-
typeof configLocalization.messages === "object" &&
|
|
1676
|
-
Object.keys(configLocalization.messages).length > 0
|
|
1677
|
-
);
|
|
1678
|
-
|
|
1679
|
-
const hasRuntimeMessages = Boolean(
|
|
1680
|
-
runtimeState?.messages &&
|
|
1681
|
-
typeof runtimeState.messages === "object" &&
|
|
1682
|
-
Object.keys(runtimeState.messages).length > 0
|
|
1683
|
-
);
|
|
1684
|
-
|
|
1685
|
-
return hasRuntimeProvider || hasConfigProvider || hasConfigMessages || hasRuntimeMessages;
|
|
1686
|
-
}
|
|
1687
|
-
|
|
1688
|
-
function isLocaleBundle(bundle) {
|
|
1689
|
-
if (!bundle || typeof bundle !== "object" || Array.isArray(bundle)) {
|
|
1690
|
-
return false;
|
|
1691
|
-
}
|
|
1692
|
-
|
|
1693
|
-
return Object.values(bundle).some((value) => {
|
|
1694
|
-
if (typeof value === "string") return true;
|
|
1695
|
-
return Boolean(value && typeof value === "object" && typeof value.content === "string");
|
|
1696
|
-
});
|
|
1697
|
-
}
|
|
1698
|
-
|
|
1699
|
-
function normalizeMessageBundle(bundle) {
|
|
1700
|
-
if (!bundle || typeof bundle !== "object" || Array.isArray(bundle)) {
|
|
1701
|
-
return {};
|
|
1702
|
-
}
|
|
1703
|
-
|
|
1704
|
-
const normalized = {};
|
|
1705
|
-
Object.entries(bundle).forEach(([key, value]) => {
|
|
1706
|
-
if (typeof value === "string") {
|
|
1707
|
-
normalized[key] = value;
|
|
1708
|
-
return;
|
|
1709
|
-
}
|
|
1710
|
-
|
|
1711
|
-
if (value && typeof value === "object" && typeof value.content === "string") {
|
|
1712
|
-
normalized[key] = value.content;
|
|
1713
|
-
}
|
|
1714
|
-
});
|
|
1715
|
-
|
|
1716
|
-
return normalized;
|
|
1717
|
-
}
|
|
1718
|
-
|
|
1719
|
-
function getLocalizationProviderLoader(configLocalization) {
|
|
1720
|
-
if (!configLocalization || typeof configLocalization !== "object") return null;
|
|
1721
|
-
|
|
1722
|
-
return (
|
|
1723
|
-
(typeof configLocalization?.loadLocale === "function"
|
|
1724
|
-
? configLocalization.loadLocale
|
|
1725
|
-
: null) ||
|
|
1726
|
-
(typeof configLocalization?.provider?.loadLocale === "function"
|
|
1727
|
-
? configLocalization.provider.loadLocale
|
|
1728
|
-
: null) ||
|
|
1729
|
-
(typeof configLocalization?.setLocale === "function"
|
|
1730
|
-
? configLocalization.setLocale
|
|
1731
|
-
: null) ||
|
|
1732
|
-
(typeof configLocalization?.provider?.setLocale === "function"
|
|
1733
|
-
? configLocalization.provider.setLocale
|
|
1734
|
-
: null)
|
|
1735
|
-
);
|
|
1736
|
-
}
|
|
1737
|
-
|
|
1738
|
-
function buildLocaleProbeList({ defaultLocale, runtimeState, knownLocales }) {
|
|
1739
|
-
const candidates = new Set();
|
|
1740
|
-
|
|
1741
|
-
const normalizedDefault = normalizeLocaleTag(defaultLocale);
|
|
1742
|
-
if (normalizedDefault) {
|
|
1743
|
-
candidates.add(normalizedDefault);
|
|
1744
|
-
}
|
|
1745
|
-
|
|
1746
|
-
if (Array.isArray(runtimeState?.loadedLocales)) {
|
|
1747
|
-
runtimeState.loadedLocales.forEach((locale) => {
|
|
1748
|
-
const normalized = normalizeLocaleTag(locale);
|
|
1749
|
-
if (normalized) {
|
|
1750
|
-
candidates.add(normalized);
|
|
1751
|
-
candidates.add(toBaseLocale(normalized));
|
|
1752
|
-
}
|
|
1753
|
-
});
|
|
1754
|
-
}
|
|
1755
|
-
|
|
1756
|
-
if (Array.isArray(knownLocales)) {
|
|
1757
|
-
knownLocales.forEach((locale) => {
|
|
1758
|
-
const normalized = normalizeLocaleTag(locale);
|
|
1759
|
-
if (normalized) {
|
|
1760
|
-
candidates.add(normalized);
|
|
1761
|
-
candidates.add(toBaseLocale(normalized));
|
|
1762
|
-
}
|
|
1763
|
-
});
|
|
1764
|
-
}
|
|
1765
|
-
|
|
1766
|
-
if (typeof navigator !== "undefined" && Array.isArray(navigator.languages)) {
|
|
1767
|
-
navigator.languages.forEach((locale) => {
|
|
1768
|
-
const normalized = normalizeLocaleTag(locale);
|
|
1769
|
-
if (normalized) {
|
|
1770
|
-
candidates.add(normalized);
|
|
1771
|
-
candidates.add(toBaseLocale(normalized));
|
|
1772
|
-
}
|
|
1773
|
-
});
|
|
1774
|
-
}
|
|
1775
|
-
|
|
1776
|
-
LOCALE_PROBE_CANDIDATES.forEach((locale) => {
|
|
1777
|
-
const normalized = normalizeLocaleTag(locale);
|
|
1778
|
-
if (normalized) {
|
|
1779
|
-
candidates.add(normalized);
|
|
1780
|
-
candidates.add(toBaseLocale(normalized));
|
|
1781
|
-
}
|
|
1782
|
-
});
|
|
1783
|
-
|
|
1784
|
-
candidates.delete("");
|
|
1785
|
-
return Array.from(candidates).sort((a, b) => a.localeCompare(b));
|
|
1786
|
-
}
|
|
1787
|
-
|
|
1788
|
-
function bundlesDifferFromOrigin(originBundle, candidateBundle) {
|
|
1789
|
-
const originEntries = normalizeMessageBundle(originBundle);
|
|
1790
|
-
const candidateEntries = normalizeMessageBundle(candidateBundle);
|
|
1791
|
-
|
|
1792
|
-
const originKeys = Object.keys(originEntries);
|
|
1793
|
-
const candidateKeys = Object.keys(candidateEntries);
|
|
1794
|
-
if (!originKeys.length || !candidateKeys.length) {
|
|
1795
|
-
return false;
|
|
1796
|
-
}
|
|
1797
|
-
|
|
1798
|
-
return originKeys.some((key) => {
|
|
1799
|
-
if (!Object.prototype.hasOwnProperty.call(candidateEntries, key)) return false;
|
|
1800
|
-
return String(candidateEntries[key]) !== String(originEntries[key]);
|
|
1801
|
-
});
|
|
1802
|
-
}
|
|
1803
|
-
|
|
1804
|
-
function collectLocalesFromMessageRows(source, locales) {
|
|
1805
|
-
if (!source || typeof source !== "object" || Array.isArray(source)) return;
|
|
1806
|
-
|
|
1807
|
-
Object.values(source).forEach((row) => {
|
|
1808
|
-
if (!row || typeof row !== "object" || Array.isArray(row)) return;
|
|
1809
|
-
if (typeof row.content === "string") return;
|
|
1810
|
-
|
|
1811
|
-
Object.entries(row).forEach(([localeKey, translatedValue]) => {
|
|
1812
|
-
const normalized = normalizeLocaleTag(localeKey);
|
|
1813
|
-
if (!normalized) return;
|
|
1814
|
-
|
|
1815
|
-
const hasValue =
|
|
1816
|
-
typeof translatedValue === "string" ||
|
|
1817
|
-
Boolean(
|
|
1818
|
-
translatedValue &&
|
|
1819
|
-
typeof translatedValue === "object" &&
|
|
1820
|
-
typeof translatedValue.content === "string"
|
|
1821
|
-
);
|
|
1822
|
-
|
|
1823
|
-
if (hasValue) {
|
|
1824
|
-
locales.add(normalized);
|
|
1825
|
-
}
|
|
1826
|
-
});
|
|
1827
|
-
});
|
|
1828
|
-
}
|
|
1829
|
-
|
|
1830
|
-
function collectLocalesFromLocaleBundles(source, locales) {
|
|
1831
|
-
if (!source || typeof source !== "object" || Array.isArray(source)) return;
|
|
1832
|
-
|
|
1833
|
-
Object.entries(source).forEach(([localeKey, bundle]) => {
|
|
1834
|
-
const normalized = normalizeLocaleTag(localeKey);
|
|
1835
|
-
if (!normalized) return;
|
|
1836
|
-
if (!isLocaleBundle(bundle)) return;
|
|
1837
|
-
locales.add(normalized);
|
|
1838
|
-
});
|
|
1839
|
-
}
|
|
1840
|
-
|
|
1841
|
-
function collectLocalesFromConfiguredList(source, locales) {
|
|
1842
|
-
if (!Array.isArray(source)) return;
|
|
1843
|
-
|
|
1844
|
-
source.forEach((localeValue) => {
|
|
1845
|
-
const normalized = normalizeLocaleTag(localeValue);
|
|
1846
|
-
if (normalized) {
|
|
1847
|
-
locales.add(normalized);
|
|
1848
|
-
}
|
|
1849
|
-
});
|
|
1850
|
-
}
|
|
1851
|
-
|
|
1852
|
-
async function detectStartupLocalizationLocales() {
|
|
1853
|
-
const locales = new Set();
|
|
1854
|
-
|
|
1855
|
-
const configLocalization =
|
|
1856
|
-
PDS?.currentConfig?.localization && typeof PDS.currentConfig.localization === "object"
|
|
1857
|
-
? PDS.currentConfig.localization
|
|
1858
|
-
: null;
|
|
1859
|
-
|
|
1860
|
-
const defaultLocale = normalizeLocaleTag(configLocalization?.locale);
|
|
1861
|
-
if (defaultLocale) {
|
|
1862
|
-
locales.add(defaultLocale);
|
|
1863
|
-
}
|
|
1864
|
-
|
|
1865
|
-
collectLocalesFromConfiguredList(configLocalization?.locales, locales);
|
|
1866
|
-
collectLocalesFromConfiguredList(configLocalization?.provider?.locales, locales);
|
|
1867
|
-
|
|
1868
|
-
if (locales.size >= 2) {
|
|
1869
|
-
return Array.from(locales).sort((a, b) => a.localeCompare(b));
|
|
1870
|
-
}
|
|
1871
|
-
|
|
1872
|
-
const runtimeState =
|
|
1873
|
-
typeof PDS?.getLocalizationState === "function"
|
|
1874
|
-
? PDS.getLocalizationState()
|
|
1875
|
-
: null;
|
|
1876
|
-
const runtimeDefaultLocale = normalizeLocaleTag(runtimeState?.locale);
|
|
1877
|
-
if (runtimeDefaultLocale) {
|
|
1878
|
-
locales.add(runtimeDefaultLocale);
|
|
1879
|
-
}
|
|
1880
|
-
|
|
1881
|
-
const messageSources = [
|
|
1882
|
-
configLocalization?.messages,
|
|
1883
|
-
configLocalization?.messagesByLocale,
|
|
1884
|
-
configLocalization?.i18n,
|
|
1885
|
-
configLocalization?.translations,
|
|
1886
|
-
configLocalization?.provider?.messages,
|
|
1887
|
-
configLocalization?.provider?.messagesByLocale,
|
|
1888
|
-
configLocalization?.provider?.i18n,
|
|
1889
|
-
configLocalization?.provider?.translations,
|
|
1890
|
-
];
|
|
1891
|
-
|
|
1892
|
-
messageSources.forEach((source) => {
|
|
1893
|
-
collectLocalesFromMessageRows(source, locales);
|
|
1894
|
-
collectLocalesFromLocaleBundles(source, locales);
|
|
1895
|
-
});
|
|
1896
|
-
|
|
1897
|
-
const localeListFromRows = Array.from(locales).sort((a, b) => a.localeCompare(b));
|
|
1898
|
-
if (localeListFromRows.length >= 2) {
|
|
1899
|
-
return localeListFromRows;
|
|
1900
|
-
}
|
|
1901
|
-
|
|
1902
|
-
const providerLoader = getLocalizationProviderLoader(configLocalization);
|
|
1903
|
-
const runtimeLoadLocale =
|
|
1904
|
-
typeof PDS?.loadLocale === "function" ? PDS.loadLocale.bind(PDS) : null;
|
|
1905
|
-
|
|
1906
|
-
if (typeof providerLoader !== "function" && typeof runtimeLoadLocale !== "function") {
|
|
1907
|
-
return localeListFromRows;
|
|
1908
|
-
}
|
|
1909
|
-
|
|
1910
|
-
const originLocale =
|
|
1911
|
-
normalizeLocaleTag(configLocalization?.locale) ||
|
|
1912
|
-
normalizeLocaleTag(runtimeState?.locale) ||
|
|
1913
|
-
"en";
|
|
1914
|
-
|
|
1915
|
-
locales.add(originLocale);
|
|
1916
|
-
|
|
1917
|
-
let originBundle = normalizeMessageBundle(runtimeState?.messages || configLocalization?.messages);
|
|
1918
|
-
if (!Object.keys(originBundle).length) {
|
|
1919
|
-
try {
|
|
1920
|
-
let loadedOrigin = null;
|
|
1921
|
-
|
|
1922
|
-
if (typeof runtimeLoadLocale === "function") {
|
|
1923
|
-
loadedOrigin = await Promise.resolve(runtimeLoadLocale(originLocale));
|
|
1924
|
-
} else {
|
|
1925
|
-
loadedOrigin = await Promise.resolve(
|
|
1926
|
-
providerLoader({
|
|
1927
|
-
locale: originLocale,
|
|
1928
|
-
defaultLocale: originLocale,
|
|
1929
|
-
reason: "startup-locale-detect-origin",
|
|
1930
|
-
loadedLocales: Array.from(locales),
|
|
1931
|
-
messages: {},
|
|
1932
|
-
load: true,
|
|
1933
|
-
})
|
|
1934
|
-
);
|
|
1935
|
-
}
|
|
1936
|
-
|
|
1937
|
-
originBundle = normalizeMessageBundle(loadedOrigin);
|
|
1938
|
-
} catch (error) {}
|
|
1939
|
-
}
|
|
1940
|
-
|
|
1941
|
-
const probeLocales = buildLocaleProbeList({
|
|
1942
|
-
defaultLocale: originLocale,
|
|
1943
|
-
runtimeState,
|
|
1944
|
-
knownLocales: Array.from(locales),
|
|
1945
|
-
});
|
|
1946
|
-
|
|
1947
|
-
for (const candidateLocale of probeLocales) {
|
|
1948
|
-
if (!candidateLocale || candidateLocale === originLocale) {
|
|
1949
|
-
continue;
|
|
1950
|
-
}
|
|
1951
|
-
|
|
1952
|
-
try {
|
|
1953
|
-
let candidateBundle = null;
|
|
1954
|
-
|
|
1955
|
-
if (typeof runtimeLoadLocale === "function") {
|
|
1956
|
-
candidateBundle = await Promise.resolve(runtimeLoadLocale(candidateLocale));
|
|
1957
|
-
} else {
|
|
1958
|
-
candidateBundle = await Promise.resolve(
|
|
1959
|
-
providerLoader({
|
|
1960
|
-
locale: candidateLocale,
|
|
1961
|
-
defaultLocale: originLocale,
|
|
1962
|
-
reason: "startup-locale-detect-probe",
|
|
1963
|
-
loadedLocales: Array.from(locales),
|
|
1964
|
-
messages: {},
|
|
1965
|
-
load: true,
|
|
1966
|
-
})
|
|
1967
|
-
);
|
|
1968
|
-
}
|
|
1969
|
-
|
|
1970
|
-
if (bundlesDifferFromOrigin(originBundle, candidateBundle)) {
|
|
1971
|
-
locales.add(candidateLocale);
|
|
1972
|
-
if (locales.size >= 2) {
|
|
1973
|
-
break;
|
|
1974
|
-
}
|
|
1975
|
-
}
|
|
1976
|
-
} catch (error) {}
|
|
1977
|
-
}
|
|
1978
|
-
|
|
1979
|
-
return Array.from(locales).sort((a, b) => a.localeCompare(b));
|
|
1980
|
-
}
|
|
1981
|
-
|
|
1982
|
-
async function getStartupLocalizationLocales() {
|
|
1983
|
-
if (Array.isArray(__startupLocalizationLocales)) {
|
|
1984
|
-
return [...__startupLocalizationLocales];
|
|
1985
|
-
}
|
|
1986
|
-
|
|
1987
|
-
if (__startupLocalizationLocalesPromise) {
|
|
1988
|
-
const inFlight = await __startupLocalizationLocalesPromise;
|
|
1989
|
-
return [...inFlight];
|
|
1990
|
-
}
|
|
1991
|
-
|
|
1992
|
-
__startupLocalizationLocalesPromise = detectStartupLocalizationLocales()
|
|
1993
|
-
.then((locales) => {
|
|
1994
|
-
__startupLocalizationLocales = Array.isArray(locales) ? locales : [];
|
|
1995
|
-
return __startupLocalizationLocales;
|
|
1996
|
-
})
|
|
1997
|
-
.catch(() => {
|
|
1998
|
-
__startupLocalizationLocales = [];
|
|
1999
|
-
return __startupLocalizationLocales;
|
|
2000
|
-
})
|
|
2001
|
-
.finally(() => {
|
|
2002
|
-
__startupLocalizationLocalesPromise = null;
|
|
2003
|
-
});
|
|
2004
|
-
|
|
2005
|
-
const resolved = await __startupLocalizationLocalesPromise;
|
|
2006
|
-
return [...resolved];
|
|
2007
|
-
}
|
|
2008
|
-
|
|
2009
|
-
function localeOptionLabel(locale) {
|
|
2010
|
-
const normalized = normalizeLocaleTag(locale);
|
|
2011
|
-
if (!normalized) return "";
|
|
2012
|
-
|
|
2013
|
-
try {
|
|
2014
|
-
const currentDocLang =
|
|
2015
|
-
normalizeLocaleTag(document.documentElement?.getAttribute?.("lang")) || "en";
|
|
2016
|
-
const displayNames = new Intl.DisplayNames([currentDocLang], {
|
|
2017
|
-
type: "language",
|
|
2018
|
-
});
|
|
2019
|
-
const named = displayNames.of(normalized);
|
|
2020
|
-
if (named && String(named).trim()) {
|
|
2021
|
-
return named;
|
|
2022
|
-
}
|
|
2023
|
-
} catch (error) {}
|
|
2024
|
-
|
|
2025
|
-
return normalized;
|
|
2026
|
-
}
|
|
2027
|
-
|
|
2028
|
-
function localeMatches(selectedLocale, activeLocale) {
|
|
2029
|
-
const selected = normalizeLocaleTag(selectedLocale);
|
|
2030
|
-
const active = normalizeLocaleTag(activeLocale);
|
|
2031
|
-
if (!selected || !active) return false;
|
|
2032
|
-
return selected === active || toBaseLocale(selected) === toBaseLocale(active);
|
|
2033
|
-
}
|
|
2034
|
-
|
|
2035
1634
|
async function buildQuickLanguageSelector() {
|
|
2036
1635
|
if (typeof document === "undefined") return null;
|
|
2037
|
-
if (!isLocalizationActive()) return null;
|
|
2038
|
-
|
|
2039
|
-
const detectedLocales = await getStartupLocalizationLocales();
|
|
2040
|
-
if (detectedLocales.length < 2) return null;
|
|
2041
1636
|
|
|
2042
|
-
const languageGroup = document.createElement("
|
|
1637
|
+
const languageGroup = document.createElement("label");
|
|
2043
1638
|
languageGroup.className = "stack-xs";
|
|
1639
|
+
languageGroup.hidden = true;
|
|
2044
1640
|
|
|
2045
1641
|
const languageText = document.createElement("span");
|
|
2046
1642
|
languageText.setAttribute("data-label", "");
|
|
2047
1643
|
languageText.textContent = msg("Language");
|
|
2048
1644
|
|
|
2049
|
-
const
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
const radioName = `pds-live-language-${Date.now()}`;
|
|
2058
|
-
|
|
2059
|
-
detectedLocales.forEach((locale) => {
|
|
2060
|
-
const optionLabel = document.createElement("label");
|
|
2061
|
-
|
|
2062
|
-
const optionInput = document.createElement("input");
|
|
2063
|
-
optionInput.type = "radio";
|
|
2064
|
-
optionInput.name = radioName;
|
|
2065
|
-
optionInput.value = locale;
|
|
2066
|
-
optionInput.checked = localeMatches(locale, activeDocumentLang);
|
|
2067
|
-
|
|
2068
|
-
const optionText = document.createElement("span");
|
|
2069
|
-
|
|
2070
|
-
optionText.textContent = localeOptionLabel(locale);
|
|
2071
|
-
|
|
2072
|
-
optionLabel.append(optionInput, optionText);
|
|
2073
|
-
languageFieldset.appendChild(optionLabel);
|
|
2074
|
-
});
|
|
2075
|
-
|
|
2076
|
-
languageFieldset.addEventListener("change", (event) => {
|
|
2077
|
-
const selected = event.target;
|
|
2078
|
-
if (!(selected instanceof HTMLInputElement)) return;
|
|
2079
|
-
if (selected.type !== "radio") return;
|
|
2080
|
-
|
|
2081
|
-
const nextLocale = normalizeLocaleTag(selected.value);
|
|
2082
|
-
if (!nextLocale) return;
|
|
2083
|
-
document.documentElement.setAttribute("lang", nextLocale);
|
|
2084
|
-
});
|
|
1645
|
+
const localeSelector = document.createElement("pds-locale");
|
|
1646
|
+
localeSelector.setAttribute("data-label", msg("Language"));
|
|
1647
|
+
localeSelector.addEventListener(
|
|
1648
|
+
"pds-locale:ready",
|
|
1649
|
+
(event) => {
|
|
1650
|
+
languageGroup.hidden = !Boolean(event?.detail?.available);
|
|
1651
|
+
}
|
|
1652
|
+
);
|
|
2085
1653
|
|
|
2086
|
-
languageGroup.append(languageText,
|
|
1654
|
+
languageGroup.append(languageText, localeSelector);
|
|
2087
1655
|
return languageGroup;
|
|
2088
1656
|
}
|
|
2089
1657
|
|