mirror of
https://github.com/cheeaun/phanpy.git
synced 2025-03-19 12:28:51 +01:00
49 lines
1.1 KiB
JavaScript
49 lines
1.1 KiB
JavaScript
import { i18n } from '@lingui/core';
|
|
|
|
import mem from './mem';
|
|
|
|
// Some codes are not supported by Intl.DisplayNames
|
|
// These are mapped to other codes as fallback
|
|
const codeMappings = {
|
|
'zh-YUE': 'YUE',
|
|
zh_HANT: 'zh-Hant',
|
|
};
|
|
|
|
const IntlDN = mem(
|
|
(locale) =>
|
|
new Intl.DisplayNames(locale || undefined, {
|
|
type: 'language',
|
|
}),
|
|
);
|
|
|
|
function _localeCode2Text(code) {
|
|
let locale;
|
|
let fallback;
|
|
if (typeof code === 'object') {
|
|
({ code, locale, fallback } = code);
|
|
}
|
|
try {
|
|
const text = IntlDN(locale || i18n.locale).of(code);
|
|
if (text !== code) return text;
|
|
if (!fallback) {
|
|
const anotherText = IntlDN(code).of(code);
|
|
if (anotherText !== code) return anotherText;
|
|
}
|
|
return fallback || '';
|
|
} catch (e) {
|
|
if (codeMappings[code]) {
|
|
try {
|
|
const text = IntlDN(codeMappings[locale] || locale || i18n.locale).of(
|
|
codeMappings[code],
|
|
);
|
|
if (text !== codeMappings[code]) return text;
|
|
return fallback || '';
|
|
} catch (e2) {
|
|
console.warn(code, e2);
|
|
}
|
|
}
|
|
return fallback || '';
|
|
}
|
|
}
|
|
|
|
export default mem(_localeCode2Text);
|