mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-09-22 12:03:25 -04:00
48 lines
1.7 KiB
TypeScript
48 lines
1.7 KiB
TypeScript
import buildLocaleList from '#shared/buildLocaleList.ts';
|
|
import localeDescriptions from '~~/locale/locales.ts';
|
|
import type { LocaleCode } from '~~/locale/locales.ts';
|
|
|
|
export const getLocaleUrls = (domainBase: string | undefined): Record<LocaleCode, string> => {
|
|
if (domainBase) {
|
|
return Object.fromEntries([
|
|
['no', domainBase.replace('{locale}', 'no')],
|
|
...localeDescriptions.map((localeDescription) => {
|
|
return [localeDescription.code, domainBase.replace('{locale}', localeDescription.code)];
|
|
}),
|
|
['_', domainBase.replace('{locale}', '')
|
|
.replace('/.', '/')
|
|
.replace('-.', '.')],
|
|
]);
|
|
}
|
|
return Object.fromEntries([
|
|
['no', 'https://no.pronouns.page'],
|
|
...localeDescriptions.map((localeDescription) => {
|
|
return [localeDescription.code, localeDescription.url];
|
|
}),
|
|
]);
|
|
};
|
|
|
|
export const getUrlForLocaleBase = (locale: LocaleCode, domainBase: string) => {
|
|
return getLocaleUrls(domainBase)[locale];
|
|
};
|
|
|
|
export const getUrlsForAllLocalesBase = (
|
|
locale: LocaleCode,
|
|
includeUnpublished: boolean = false,
|
|
domainBase: string,
|
|
) => {
|
|
const locales = buildLocaleList(locale, includeUnpublished);
|
|
const urls = getLocaleUrls(domainBase);
|
|
|
|
const codes: LocaleCode[] = ['_', ...locales.map((locale) => locale.code)];
|
|
return codes.map((code) => urls[code]);
|
|
};
|
|
|
|
export const getLocaleForUrlBase = (url: URL, domainBase: string): LocaleCode | undefined => {
|
|
const match = Object.entries(getLocaleUrls(domainBase)).find(([_, origin]) => url.origin === origin);
|
|
if (!match) {
|
|
return undefined;
|
|
}
|
|
return match[0] as LocaleCode;
|
|
};
|