initial commit
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
/* ============================================================================
|
||||
LOCALISED PATHS
|
||||
----------------------------------------------------------------------------
|
||||
Thin, typed wrappers over the pure helpers the component library already
|
||||
ships, plus the section-level helpers the route modules need. Pure and
|
||||
import-light: safe in a loader, in a `meta` function and during SSR.
|
||||
========================================================================= */
|
||||
|
||||
import {
|
||||
buildLocalizedHref,
|
||||
getCounterpartLocale,
|
||||
getLocaleFromPathname,
|
||||
isCurrentPath,
|
||||
localizePath,
|
||||
stripLocale,
|
||||
type CounterpartPathOptions,
|
||||
type Locale,
|
||||
} from "../components/ui/LanguageSwitcher/locale-path";
|
||||
import {
|
||||
ROUTE_SECTION_GROUPS,
|
||||
ROUTE_SLUGS,
|
||||
ROUTE_SLUG_KEYS,
|
||||
sectionSlugPath,
|
||||
type RouteSectionGroupId,
|
||||
type RouteSlugKey,
|
||||
} from "../lib/route-slugs";
|
||||
|
||||
export {
|
||||
buildLocalizedHref,
|
||||
getCounterpartLocale,
|
||||
getLocaleFromPathname,
|
||||
isCurrentPath,
|
||||
ROUTE_SECTION_GROUPS,
|
||||
ROUTE_SLUGS,
|
||||
ROUTE_SLUG_KEYS,
|
||||
sectionSlugPath,
|
||||
stripLocale,
|
||||
};
|
||||
export type { CounterpartPathOptions, RouteSectionGroupId, RouteSlugKey };
|
||||
|
||||
/**
|
||||
* The locale-prefixed URL for a path. Accepts an already-prefixed path, an
|
||||
* unprefixed one, or a bare "/".
|
||||
* ("/contact", "ar") -> "/ar/contact" ("/en/contact", "ar") -> "/ar/contact"
|
||||
*/
|
||||
export function localizedPath(path: string, locale: Locale): string {
|
||||
return localizePath(path, locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* The same page in the other language, query string and fragment preserved.
|
||||
* This is what the header's language switch links to.
|
||||
* ("/en/news-and-updates?page=2", "ar") -> "/ar/news-and-updates?page=2"
|
||||
*/
|
||||
export function alternatePath(
|
||||
pathname: string,
|
||||
targetLocale: Locale,
|
||||
options: CounterpartPathOptions = {},
|
||||
): string {
|
||||
return buildLocalizedHref(pathname, targetLocale, options);
|
||||
}
|
||||
|
||||
/** The locale-prefixed URL of one of the ten sections. */
|
||||
export function sectionPath(key: RouteSlugKey, locale: Locale): string {
|
||||
return localizePath(sectionSlugPath(key), locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Both language URLs for the page currently at `pathname`, in the order
|
||||
* `SUPPORTED_LOCALES` declares. Used to emit hreflang alternates.
|
||||
*/
|
||||
export function localeAlternates(
|
||||
pathname: string,
|
||||
options: CounterpartPathOptions = {},
|
||||
): { locale: Locale; path: string }[] {
|
||||
return (["en", "ar"] as const).map((locale) => ({
|
||||
locale,
|
||||
path: buildLocalizedHref(pathname, locale, options),
|
||||
}));
|
||||
}
|
||||
Reference in New Issue
Block a user