mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 13:05:32 +09:00
refactor: remove dead code (#3337)
This commit is contained in:
1 parent
a19002652b
commit
93d1f8af46
1527 files changed
+21170
-73846
No files matched your search
@@ -1,46 +1,8 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import type {LocaleCode} from '@fluxer/constants/src/Locales';
|
||||
import {
|
||||
getLocaleByCode,
|
||||
getLocaleDisplayName,
|
||||
getLocaleFlagCode,
|
||||
getLocaleLanguageCode,
|
||||
} from '@pkgs/locale/src/catalog/LocaleCatalog';
|
||||
import {resolveLocaleFromAcceptLanguageHeader} from '@pkgs/locale/src/resolution/AcceptLanguageNegotiation';
|
||||
|
||||
interface LocaleMetadata {
|
||||
code: LocaleCode;
|
||||
languageCode: string;
|
||||
name: string;
|
||||
flagCode: string;
|
||||
}
|
||||
|
||||
export function getLocaleMetadata(locale: LocaleCode): LocaleMetadata {
|
||||
return {
|
||||
code: locale,
|
||||
languageCode: getLocaleLanguageCode(locale),
|
||||
name: getLocaleDisplayName(locale),
|
||||
flagCode: getLocaleFlagCode(locale),
|
||||
};
|
||||
}
|
||||
|
||||
export function getLocaleName(locale: LocaleCode): string {
|
||||
return getLocaleDisplayName(locale);
|
||||
}
|
||||
|
||||
export function getFlagCode(locale: LocaleCode): string {
|
||||
return getLocaleFlagCode(locale);
|
||||
}
|
||||
|
||||
export function getLocaleFromCode(code: string): LocaleCode | null {
|
||||
return getLocaleByCode(code);
|
||||
}
|
||||
|
||||
export function getLocaleCode(locale: LocaleCode): string {
|
||||
return getLocaleLanguageCode(locale);
|
||||
}
|
||||
|
||||
export function parseAcceptLanguage(acceptLanguageHeader: string | null | undefined): LocaleCode {
|
||||
return resolveLocaleFromAcceptLanguageHeader(acceptLanguageHeader);
|
||||
}
|
||||
@@ -2,12 +2,6 @@
|
||||
|
||||
import {AllLocales, type LocaleCode, Locales} from '@fluxer/constants/src/Locales';
|
||||
|
||||
interface LocaleMetadata {
|
||||
displayName: string;
|
||||
flagCode: string;
|
||||
aliases?: ReadonlyArray<string>;
|
||||
}
|
||||
|
||||
export const DEFAULT_LOCALE: LocaleCode = Locales.EN_US;
|
||||
const SUPPORTED_LOCALES: ReadonlyArray<LocaleCode> = AllLocales;
|
||||
const SUPPORTED_LOCALE_SET: ReadonlySet<LocaleCode> = new Set<LocaleCode>(SUPPORTED_LOCALES);
|
||||
@@ -21,146 +15,10 @@ const LANGUAGE_FALLBACK_BY_LANGUAGE_CODE: Record<string, LocaleCode> = {
|
||||
zh: Locales.ZH_CN,
|
||||
sv: Locales.SV_SE,
|
||||
};
|
||||
const LOCALE_METADATA_BY_CODE: Record<LocaleCode, LocaleMetadata> = {
|
||||
[Locales.AR]: {
|
||||
displayName: 'العربية',
|
||||
flagCode: '1f1f8-1f1e6',
|
||||
},
|
||||
[Locales.BG]: {
|
||||
displayName: 'Български',
|
||||
flagCode: '1f1e7-1f1ec',
|
||||
},
|
||||
[Locales.CS]: {
|
||||
displayName: 'Čeština',
|
||||
flagCode: '1f1e8-1f1ff',
|
||||
},
|
||||
[Locales.DA]: {
|
||||
displayName: 'Dansk',
|
||||
flagCode: '1f1e9-1f1f0',
|
||||
},
|
||||
[Locales.DE]: {
|
||||
displayName: 'Deutsch',
|
||||
flagCode: '1f1e9-1f1ea',
|
||||
},
|
||||
[Locales.EL]: {
|
||||
displayName: 'Ελληνικά',
|
||||
flagCode: '1f1ec-1f1f7',
|
||||
},
|
||||
[Locales.EN_GB]: {
|
||||
displayName: 'English',
|
||||
flagCode: '1f1ec-1f1e7',
|
||||
},
|
||||
[Locales.EN_US]: {
|
||||
displayName: 'English (US)',
|
||||
flagCode: '1f1fa-1f1f8',
|
||||
aliases: ['en'],
|
||||
},
|
||||
[Locales.ES_ES]: {
|
||||
displayName: 'Español (España)',
|
||||
flagCode: '1f1ea-1f1f8',
|
||||
},
|
||||
[Locales.ES_419]: {
|
||||
displayName: 'Español (Latinoamérica)',
|
||||
flagCode: '1f30e',
|
||||
},
|
||||
[Locales.FI]: {
|
||||
displayName: 'Suomi',
|
||||
flagCode: '1f1eb-1f1ee',
|
||||
},
|
||||
[Locales.FR]: {
|
||||
displayName: 'Français',
|
||||
flagCode: '1f1eb-1f1f7',
|
||||
},
|
||||
[Locales.HE]: {
|
||||
displayName: 'עברית',
|
||||
flagCode: '1f1ee-1f1f1',
|
||||
},
|
||||
[Locales.HI]: {
|
||||
displayName: 'हिन्दी',
|
||||
flagCode: '1f1ee-1f1f3',
|
||||
},
|
||||
[Locales.HR]: {
|
||||
displayName: 'Hrvatski',
|
||||
flagCode: '1f1ed-1f1f7',
|
||||
},
|
||||
[Locales.HU]: {
|
||||
displayName: 'Magyar',
|
||||
flagCode: '1f1ed-1f1fa',
|
||||
},
|
||||
[Locales.ID]: {
|
||||
displayName: 'Bahasa Indonesia',
|
||||
flagCode: '1f1ee-1f1e9',
|
||||
},
|
||||
[Locales.IT]: {
|
||||
displayName: 'Italiano',
|
||||
flagCode: '1f1ee-1f1f9',
|
||||
},
|
||||
[Locales.JA]: {
|
||||
displayName: '日本語',
|
||||
flagCode: '1f1ef-1f1f5',
|
||||
},
|
||||
[Locales.KO]: {
|
||||
displayName: '한국어',
|
||||
flagCode: '1f1f0-1f1f7',
|
||||
},
|
||||
[Locales.LT]: {
|
||||
displayName: 'Lietuvių',
|
||||
flagCode: '1f1f1-1f1f9',
|
||||
},
|
||||
[Locales.NL]: {
|
||||
displayName: 'Nederlands',
|
||||
flagCode: '1f1f3-1f1f1',
|
||||
},
|
||||
[Locales.NO]: {
|
||||
displayName: 'Norsk',
|
||||
flagCode: '1f1f3-1f1f4',
|
||||
aliases: ['nb', 'nn'],
|
||||
},
|
||||
[Locales.PL]: {
|
||||
displayName: 'Polski',
|
||||
flagCode: '1f1f5-1f1f1',
|
||||
},
|
||||
[Locales.PT_BR]: {
|
||||
displayName: 'Português (Brasil)',
|
||||
flagCode: '1f1e7-1f1f7',
|
||||
},
|
||||
[Locales.RO]: {
|
||||
displayName: 'Română',
|
||||
flagCode: '1f1f7-1f1f4',
|
||||
},
|
||||
[Locales.RU]: {
|
||||
displayName: 'Русский',
|
||||
flagCode: '1f1f7-1f1fa',
|
||||
},
|
||||
[Locales.SV_SE]: {
|
||||
displayName: 'Svenska',
|
||||
flagCode: '1f1f8-1f1ea',
|
||||
aliases: ['sv'],
|
||||
},
|
||||
[Locales.TH]: {
|
||||
displayName: 'ไทย',
|
||||
flagCode: '1f1f9-1f1ed',
|
||||
},
|
||||
[Locales.TR]: {
|
||||
displayName: 'Türkçe',
|
||||
flagCode: '1f1f9-1f1f7',
|
||||
},
|
||||
[Locales.UK]: {
|
||||
displayName: 'Українська',
|
||||
flagCode: '1f1fa-1f1e6',
|
||||
},
|
||||
[Locales.VI]: {
|
||||
displayName: 'Tiếng Việt',
|
||||
flagCode: '1f1fb-1f1f3',
|
||||
},
|
||||
[Locales.ZH_CN]: {
|
||||
displayName: '简体中文',
|
||||
flagCode: '1f1e8-1f1f3',
|
||||
},
|
||||
[Locales.ZH_TW]: {
|
||||
displayName: '繁體中文',
|
||||
flagCode: '1f1f9-1f1fc',
|
||||
},
|
||||
const LOCALE_ALIASES: Partial<Record<LocaleCode, ReadonlyArray<string>>> = {
|
||||
[Locales.EN_US]: ['en'],
|
||||
[Locales.NO]: ['nb', 'nn'],
|
||||
[Locales.SV_SE]: ['sv'],
|
||||
};
|
||||
const NORMALIZED_LOCALE_TO_CODE = createNormalizedLocaleLookup();
|
||||
|
||||
@@ -172,14 +30,6 @@ function isSupportedLocale(locale: LocaleCode): boolean {
|
||||
return SUPPORTED_LOCALE_SET.has(locale);
|
||||
}
|
||||
|
||||
export function getLocaleDisplayName(locale: LocaleCode): string {
|
||||
return LOCALE_METADATA_BY_CODE[locale].displayName;
|
||||
}
|
||||
|
||||
export function getLocaleFlagCode(locale: LocaleCode): string {
|
||||
return LOCALE_METADATA_BY_CODE[locale].flagCode;
|
||||
}
|
||||
|
||||
export function getLocaleByCode(code: string): LocaleCode | null {
|
||||
const normalizedCode = normalizeLocaleCode(code);
|
||||
if (!normalizedCode) {
|
||||
@@ -189,10 +39,6 @@ export function getLocaleByCode(code: string): LocaleCode | null {
|
||||
return locale ?? null;
|
||||
}
|
||||
|
||||
export function getLocaleLanguageCode(locale: LocaleCode): string {
|
||||
return locale.split('-')[0];
|
||||
}
|
||||
|
||||
export function getPreferredLocaleForLanguageCode(languageCode: string): LocaleCode | null {
|
||||
const normalizedLanguageCode = normalizeLocaleCode(languageCode);
|
||||
if (!normalizedLanguageCode) {
|
||||
@@ -228,7 +74,7 @@ function createNormalizedLocaleLookup(): ReadonlyMap<string, LocaleCode> {
|
||||
lookup.set(normalizeLocaleCode(locale), locale);
|
||||
}
|
||||
for (const locale of SUPPORTED_LOCALES) {
|
||||
const aliases = LOCALE_METADATA_BY_CODE[locale].aliases ?? [];
|
||||
const aliases = LOCALE_ALIASES[locale] ?? [];
|
||||
for (const alias of aliases) {
|
||||
lookup.set(normalizeLocaleCode(alias), locale);
|
||||
}
|
||||
|
||||
@@ -1,89 +1,14 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import {AllLocales, type LocaleCode, Locales} from '@fluxer/constants/src/Locales';
|
||||
import {
|
||||
getFlagCode,
|
||||
getLocaleCode,
|
||||
getLocaleFromCode,
|
||||
getLocaleMetadata,
|
||||
getLocaleName,
|
||||
parseAcceptLanguage,
|
||||
} from '@pkgs/locale/src/LocaleService';
|
||||
import {type LocaleCode, Locales} from '@fluxer/constants/src/Locales';
|
||||
import {parseAcceptLanguage} from '@pkgs/locale/src/LocaleService';
|
||||
import {describe, expect, it} from 'vitest';
|
||||
|
||||
interface LocaleLookupCase {
|
||||
input: string;
|
||||
expected: LocaleCode | null;
|
||||
}
|
||||
|
||||
interface AcceptLanguageCase {
|
||||
header: string | null | undefined;
|
||||
expected: LocaleCode;
|
||||
}
|
||||
|
||||
const localeNameCases: Array<{
|
||||
locale: LocaleCode;
|
||||
expected: string;
|
||||
}> = [
|
||||
{locale: Locales.EN_US, expected: 'English (US)'},
|
||||
{locale: Locales.EN_GB, expected: 'English'},
|
||||
{locale: Locales.DE, expected: 'Deutsch'},
|
||||
{locale: Locales.JA, expected: '日本語'},
|
||||
{locale: Locales.ZH_CN, expected: '简体中文'},
|
||||
{locale: Locales.ZH_TW, expected: '繁體中文'},
|
||||
{locale: Locales.ES_419, expected: 'Español (Latinoamérica)'},
|
||||
{locale: Locales.PT_BR, expected: 'Português (Brasil)'},
|
||||
];
|
||||
const flagCodeCases: Array<{
|
||||
locale: LocaleCode;
|
||||
expected: string;
|
||||
}> = [
|
||||
{locale: Locales.EN_US, expected: '1f1fa-1f1f8'},
|
||||
{locale: Locales.EN_GB, expected: '1f1ec-1f1e7'},
|
||||
{locale: Locales.DE, expected: '1f1e9-1f1ea'},
|
||||
{locale: Locales.JA, expected: '1f1ef-1f1f5'},
|
||||
{locale: Locales.ZH_CN, expected: '1f1e8-1f1f3'},
|
||||
{locale: Locales.ES_419, expected: '1f30e'},
|
||||
{locale: Locales.PT_BR, expected: '1f1e7-1f1f7'},
|
||||
];
|
||||
const localeLookupCases: Array<LocaleLookupCase> = [
|
||||
{input: 'en', expected: Locales.EN_US},
|
||||
{input: 'en-US', expected: Locales.EN_US},
|
||||
{input: 'en-us', expected: Locales.EN_US},
|
||||
{input: 'en_GB', expected: Locales.EN_GB},
|
||||
{input: 'en-gb', expected: Locales.EN_GB},
|
||||
{input: 'de', expected: Locales.DE},
|
||||
{input: 'ja', expected: Locales.JA},
|
||||
{input: 'zh-CN', expected: Locales.ZH_CN},
|
||||
{input: 'zh-cn', expected: Locales.ZH_CN},
|
||||
{input: 'zh-TW', expected: Locales.ZH_TW},
|
||||
{input: 'zh-tw', expected: Locales.ZH_TW},
|
||||
{input: 'es-419', expected: Locales.ES_419},
|
||||
{input: 'pt-br', expected: Locales.PT_BR},
|
||||
{input: 'sv', expected: Locales.SV_SE},
|
||||
{input: 'sv-se', expected: Locales.SV_SE},
|
||||
{input: 'nb', expected: Locales.NO},
|
||||
{input: 'nn', expected: Locales.NO},
|
||||
{input: 'NB', expected: Locales.NO},
|
||||
{input: 'xx', expected: null},
|
||||
{input: '', expected: null},
|
||||
{input: 'en-AU', expected: null},
|
||||
];
|
||||
const localeCodeCases: Array<{
|
||||
locale: LocaleCode;
|
||||
expected: string;
|
||||
}> = [
|
||||
{locale: Locales.EN_US, expected: 'en'},
|
||||
{locale: Locales.EN_GB, expected: 'en'},
|
||||
{locale: Locales.DE, expected: 'de'},
|
||||
{locale: Locales.ZH_CN, expected: 'zh'},
|
||||
{locale: Locales.ZH_TW, expected: 'zh'},
|
||||
{locale: Locales.ES_ES, expected: 'es'},
|
||||
{locale: Locales.ES_419, expected: 'es'},
|
||||
{locale: Locales.PT_BR, expected: 'pt'},
|
||||
{locale: Locales.SV_SE, expected: 'sv'},
|
||||
{locale: Locales.JA, expected: 'ja'},
|
||||
];
|
||||
const acceptLanguageCases: Array<AcceptLanguageCase> = [
|
||||
{header: null, expected: Locales.EN_US},
|
||||
{header: undefined, expected: Locales.EN_US},
|
||||
@@ -140,57 +65,6 @@ const acceptLanguageCases: Array<AcceptLanguageCase> = [
|
||||
];
|
||||
|
||||
describe('LocaleService', () => {
|
||||
describe('getLocaleMetadata', () => {
|
||||
it('returns consolidated metadata for a locale', () => {
|
||||
expect(getLocaleMetadata(Locales.EN_US)).toEqual({
|
||||
code: Locales.EN_US,
|
||||
languageCode: 'en',
|
||||
name: 'English (US)',
|
||||
flagCode: '1f1fa-1f1f8',
|
||||
});
|
||||
});
|
||||
it('returns metadata for every supported locale', () => {
|
||||
for (const locale of AllLocales) {
|
||||
const metadata = getLocaleMetadata(locale);
|
||||
expect(metadata.code).toBe(locale);
|
||||
expect(metadata.name.length).toBeGreaterThan(0);
|
||||
expect(metadata.flagCode.length).toBeGreaterThan(0);
|
||||
}
|
||||
});
|
||||
});
|
||||
describe('getLocaleName', () => {
|
||||
for (const {locale, expected} of localeNameCases) {
|
||||
it(`returns ${expected} for ${locale}`, () => {
|
||||
expect(getLocaleName(locale)).toBe(expected);
|
||||
});
|
||||
}
|
||||
});
|
||||
describe('getFlagCode', () => {
|
||||
for (const {locale, expected} of flagCodeCases) {
|
||||
it(`returns ${expected} for ${locale}`, () => {
|
||||
expect(getFlagCode(locale)).toBe(expected);
|
||||
});
|
||||
}
|
||||
});
|
||||
describe('getLocaleFromCode', () => {
|
||||
for (const {input, expected} of localeLookupCases) {
|
||||
it(`resolves ${input || 'empty'} to ${expected ?? 'null'}`, () => {
|
||||
expect(getLocaleFromCode(input)).toBe(expected);
|
||||
});
|
||||
}
|
||||
it('resolves canonical locale codes for all supported locales', () => {
|
||||
for (const locale of AllLocales) {
|
||||
expect(getLocaleFromCode(locale)).toBe(locale);
|
||||
}
|
||||
});
|
||||
});
|
||||
describe('getLocaleCode', () => {
|
||||
for (const {locale, expected} of localeCodeCases) {
|
||||
it(`returns ${expected} for ${locale}`, () => {
|
||||
expect(getLocaleCode(locale)).toBe(expected);
|
||||
});
|
||||
}
|
||||
});
|
||||
describe('parseAcceptLanguage', () => {
|
||||
for (const {header, expected} of acceptLanguageCases) {
|
||||
it(`selects ${expected} for ${header ?? 'nullish header'}`, () => {
|
||||
|
||||
Reference in new issue
Block a user