From 7ebc6041562f075a887051d5ba633420991c48c7 Mon Sep 17 00:00:00 2001 From: Michael Zetterberg Date: Mon, 8 Apr 2024 15:17:07 +0200 Subject: [PATCH] feat: rename use of locale to lang where applicable --- components/Current/Aside/Contacts/Contact.tsx | 15 ++-- components/Current/LangPopup/index.tsx | 20 +++--- components/SkipToMainContent/index.tsx | 12 ++-- constants/languages.ts | 69 +++++++++++++++++-- constants/locales.ts | 51 -------------- constants/myPages.js | 10 ++- middleware.ts | 29 ++++---- routes/protected.ts | 2 +- types/components/tracking.ts | 2 +- types/lang.ts | 10 --- types/params.ts | 2 +- types/requests/asides/contact.ts | 2 +- types/requests/utils/pageLink.ts | 2 +- types/rte/attrs.ts | 2 +- 14 files changed, 110 insertions(+), 118 deletions(-) delete mode 100644 constants/locales.ts delete mode 100644 types/lang.ts diff --git a/components/Current/Aside/Contacts/Contact.tsx b/components/Current/Aside/Contacts/Contact.tsx index cb2055d19..b90639576 100644 --- a/components/Current/Aside/Contacts/Contact.tsx +++ b/components/Current/Aside/Contacts/Contact.tsx @@ -1,7 +1,6 @@ import styles from "./contact.module.css" -import { langEnum } from "@/types/lang" -import type { Lang } from "@/types/lang" +import { Lang } from "@/constants/languages" import { Section, type ContactNode } from "@/types/requests/asides/contact" export default function Contact({ sections, system: { locale } }: ContactNode) { @@ -72,17 +71,17 @@ export default function Contact({ sections, system: { locale } }: ContactNode) { function getVisitingAddressMessage(lang: Lang) { switch (lang) { - case langEnum.sv: + case Lang.sv: return "Besöksadress" - case langEnum.en: + case Lang.en: return "Visiting address" - case langEnum.da: + case Lang.da: return "Besøgsadresse" - case langEnum.de: + case Lang.de: return "Besuchsadresse" - case langEnum.fi: + case Lang.fi: return "Vierailuosoite" - case langEnum.no: + case Lang.no: return "Besøksadresse" default: return "" diff --git a/components/Current/LangPopup/index.tsx b/components/Current/LangPopup/index.tsx index accda2e0e..80b6e3a14 100644 --- a/components/Current/LangPopup/index.tsx +++ b/components/Current/LangPopup/index.tsx @@ -1,19 +1,17 @@ -import { localeToLang } from "@/constants/locales" -import { type Lang, langEnum } from "@/types/lang" +import { Lang, localeToLang } from "@/constants/languages" import { headers } from "next/headers" export default function LangPopup({ lang }: { lang: Lang }) { const headersList = headers() const preferedLang = headersList.get("Accept-Language") ?? "" - const possibleLocales = Object.keys(localeToLang) + const possibleLangs = Object.keys(localeToLang) - if (!possibleLocales.includes(preferedLang)) { + if (!possibleLangs.includes(preferedLang)) { return null } - //@ts-ignore - const langOfChoice: Lang = localeToLang[preferedLang] + const langOfChoice: Lang = localeToLang[preferedLang as Lang] if (langOfChoice === lang) { return null @@ -23,23 +21,23 @@ export default function LangPopup({ lang }: { lang: Lang }) { let viewIn = "" switch (langOfChoice) { - case langEnum.de: + case Lang.de: language = "Deutsch" viewIn = "Ansicht in" break - case langEnum.da: + case Lang.da: language = "Dansk" viewIn = "Se in" break - case langEnum.fi: + case Lang.fi: language = "Suomi" viewIn = "Katso in" break - case langEnum.no: + case Lang.no: language = "Norsk" viewIn = "Se in" break - case langEnum.sv: + case Lang.sv: language = "Svenska" viewIn = "Visa in" break diff --git a/components/SkipToMainContent/index.tsx b/components/SkipToMainContent/index.tsx index 39ec6f5f0..520dd292e 100644 --- a/components/SkipToMainContent/index.tsx +++ b/components/SkipToMainContent/index.tsx @@ -1,22 +1,22 @@ -import { Lang, langEnum } from "@/types/lang" +import { Lang } from "@/constants/languages" export default function SkipToMainContent({ lang }: { lang: Lang }) { let message = "Skip to main content" switch (lang) { - case langEnum.de: + case Lang.de: message = "Direkt zum Inhalt" break - case langEnum.sv: + case Lang.sv: message = "Fortsätt till huvudinnehåll" break - case langEnum.da: + case Lang.da: message = "Spring over og gå til hovedindhold" break - case langEnum.no: + case Lang.no: message = "Gå videre til hovedsiden" break - case langEnum.fi: + case Lang.fi: message = "Siirry pääsisältöön" break } diff --git a/constants/languages.ts b/constants/languages.ts index 089ded4ba..a866e116f 100644 --- a/constants/languages.ts +++ b/constants/languages.ts @@ -1,8 +1,63 @@ -export const languages = { - da: "Dansk", - de: "Deutsch", - en: "English", - fi: "Suomi", - no: "Norsk", - sv: "Svenska", +export enum Lang { + en = "en", + sv = "sv", + no = "no", + fi = "fi", + da = "da", + de = "de", +} + +export const languages = { + [Lang.da]: "Dansk", + [Lang.de]: "Deutsch", + [Lang.en]: "English", + [Lang.fi]: "Suomi", + [Lang.no]: "Norsk", + [Lang.sv]: "Svenska", +} + +export const localeToLang = { + en: Lang.en, + "en-US": Lang.en, + "en-GB": Lang.en, + "en-DE": Lang.en, + "en-DK": Lang.en, + "en-SE": Lang.en, + "en-FI": Lang.en, + + sv: Lang.sv, + "se-SE": Lang.sv, + "sv-SE": Lang.sv, + "sv-FI": Lang.sv, + + fi: Lang.fi, + "fi-FI": Lang.fi, + "se-FI": Lang.fi, + "smn-FI": Lang.fi, + + dk: Lang.da, + da: Lang.da, + "da-DK": Lang.da, + "fo-DK": Lang.da, + + de: Lang.de, + "de-DE": Lang.de, + "dsb-DE": Lang.de, + "ksh-DE": Lang.de, + "nds-DE": Lang.de, + "hsb-DE": Lang.de, + "de-CH": Lang.de, + "de-AU": Lang.de, + + no: Lang.no, + nb: Lang.no, + "nb-NO": Lang.no, + "nn-NO": Lang.no, + "se-NO": Lang.no, +} as const + +export function findLang(pathname: string) { + return Object.values(Lang).find( + (l) => pathname.startsWith(`/${l}/`) || pathname === `/${l}` + ) } diff --git a/constants/locales.ts b/constants/locales.ts deleted file mode 100644 index eb44ed649..000000000 --- a/constants/locales.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { langEnum, type Lang } from "@/types/lang" - -export const localeToLang = { - en: langEnum.en, - "en-US": langEnum.en, - "en-GB": langEnum.en, - "en-DE": langEnum.en, - "en-DK": langEnum.en, - "en-SE": langEnum.en, - "en-FI": langEnum.en, - - sv: langEnum.sv, - "se-SE": langEnum.sv, - "sv-SE": langEnum.sv, - "sv-FI": langEnum.sv, - - fi: langEnum.fi, - "fi-FI": langEnum.fi, - "se-FI": langEnum.fi, - "smn-FI": langEnum.fi, - - dk: langEnum.da, - da: langEnum.da, - "da-DK": langEnum.da, - "fo-DK": langEnum.da, - - de: langEnum.de, - "de-DE": langEnum.de, - "dsb-DE": langEnum.de, - "ksh-DE": langEnum.de, - "nds-DE": langEnum.de, - "hsb-DE": langEnum.de, - "de-CH": langEnum.de, - "de-AU": langEnum.de, - - no: langEnum.no, - nb: langEnum.no, - "nb-NO": langEnum.no, - "nn-NO": langEnum.no, - "se-NO": langEnum.no, -} - -export const DEFAULT_LOCALE = "en" -export const locales: Lang[] = ["da", "de", DEFAULT_LOCALE, "fi", "no", "sv"] - -export function findLocale(pathname: string) { - let locale = locales.find( - (loc) => pathname.startsWith(`/${loc}/`) || pathname === `/${loc}` - ) - return locale -} diff --git a/constants/myPages.js b/constants/myPages.js index ad0f66089..ee6822aac 100644 --- a/constants/myPages.js +++ b/constants/myPages.js @@ -1,8 +1,12 @@ -// Due to these records being used in next.config.js, and that is -// required to be a js file, we use jsdoc to type these. /** - * @typedef {import('../types/lang').Lang} Lang + * @file Due to these records being used in next.config.js, and that is required + * to be a js file, we use jsdoc to type these. */ + +/** + * @typedef {import('@/constants/languages').Lang} Lang + */ + /** @type {Record.} */ export const pageNames = { da: "mine-sider", diff --git a/middleware.ts b/middleware.ts index 747a59533..9c0c98bc3 100644 --- a/middleware.ts +++ b/middleware.ts @@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from "next/server" import { auth } from "@/auth" -import { findLocale } from "@/constants/locales" +import { findLang } from "@/constants/languages" import { pageNames } from "@/constants/myPages" import { protectedRoutes } from "@/routes/protected" @@ -11,29 +11,29 @@ import type { NextAuthRequest } from "next-auth" export async function publiceMiddleware(request: NextRequest) { const { nextUrl } = request - const locale = findLocale(nextUrl.pathname) + const lang = findLang(nextUrl.pathname) - if (nextUrl.pathname.startsWith(`/${locale}/login`)) { + if (nextUrl.pathname.startsWith(`/${lang}/login`)) { return NextResponse.next() } const contentType = "currentContentPage" - const pathNameWithoutLocale = nextUrl.pathname.replace(`/${locale}`, "") + const pathNameWithoutLang = nextUrl.pathname.replace(`/${lang}`, "") const searchParams = new URLSearchParams(request.nextUrl.searchParams) if (request.nextUrl.pathname.includes("preview")) { - searchParams.set("uri", pathNameWithoutLocale.replace("/preview", "")) + searchParams.set("uri", pathNameWithoutLang.replace("/preview", "")) return NextResponse.rewrite( - new URL(`/${locale}/preview-current?${searchParams.toString()}`, nextUrl) + new URL(`/${lang}/preview-current?${searchParams.toString()}`, nextUrl) ) } - searchParams.set("uri", pathNameWithoutLocale) + searchParams.set("uri", pathNameWithoutLang) switch (contentType) { case "currentContentPage": return NextResponse.rewrite( new URL( - `/${locale}/current-content-page?${searchParams.toString()}`, + `/${lang}/current-content-page?${searchParams.toString()}`, nextUrl ) ) @@ -45,21 +45,19 @@ export async function publiceMiddleware(request: NextRequest) { async function authedMiddlewareFunction(request: NextAuthRequest) { const { nextUrl } = request - const locale = findLocale(nextUrl.pathname)! + const lang = findLang(nextUrl.pathname)! const isLoggedIn = !!request.auth if (isLoggedIn) { /** * Temporary hard rewrite to my pages */ - return NextResponse.rewrite( - new URL(`/${locale}/${pageNames[locale]}`, nextUrl) - ) + return NextResponse.rewrite(new URL(`/${lang}/${pageNames[lang]}`, nextUrl)) } else { /** * Redirect to Loginpage * (Loginpage most likely to be removed) */ - return NextResponse.redirect(new URL(`/${locale}/login`, nextUrl)) + return NextResponse.redirect(new URL(`/${lang}/login`, nextUrl)) } } @@ -68,9 +66,8 @@ const authedMiddleware = auth(authedMiddlewareFunction) export async function middleware(request: NextRequest) { const { nextUrl } = request - const locale = findLocale(nextUrl.pathname) - if (!locale) { - //return + const lang = findLang(nextUrl.pathname) + if (!lang) { return Response.json("Not found!!!", { status: 404 }) } diff --git a/routes/protected.ts b/routes/protected.ts index cb4eca5b7..d73bad4bf 100644 --- a/routes/protected.ts +++ b/routes/protected.ts @@ -1,6 +1,6 @@ import { pageNames } from "@/constants/myPages" -import type { Lang } from "@/types/lang" +import type { Lang } from "@/constants/languages" /* Authenticated routes */ export const protectedRoutes: string[] = [ diff --git a/types/components/tracking.ts b/types/components/tracking.ts index 26f95dcbe..18bde308b 100644 --- a/types/components/tracking.ts +++ b/types/components/tracking.ts @@ -1,4 +1,4 @@ -import { Lang } from "../lang" +import type { Lang } from "@/constants/languages" export type TrackingProps = { pageData: { diff --git a/types/lang.ts b/types/lang.ts deleted file mode 100644 index 5268fb79f..000000000 --- a/types/lang.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const langEnum = { - en: "en", - sv: "sv", - no: "no", - fi: "fi", - da: "da", - de: "de", -} - -export type Lang = keyof typeof langEnum diff --git a/types/params.ts b/types/params.ts index 34c94fa5d..b20eb0756 100644 --- a/types/params.ts +++ b/types/params.ts @@ -1,4 +1,4 @@ -import { Lang } from "./lang" +import { Lang } from "@/constants/languages" export type SearchParams = { searchParams: S & { [key: string]: string } diff --git a/types/requests/asides/contact.ts b/types/requests/asides/contact.ts index 6c466b067..cff659386 100644 --- a/types/requests/asides/contact.ts +++ b/types/requests/asides/contact.ts @@ -1,5 +1,5 @@ import type { Edges } from "../utils/edges" -import type { Lang } from "@/types/lang" +import type { Lang } from "@/constants/languages" import type { Typename } from "../utils/typename" export enum Section { diff --git a/types/requests/utils/pageLink.ts b/types/requests/utils/pageLink.ts index 810c40ae1..58221c440 100644 --- a/types/requests/utils/pageLink.ts +++ b/types/requests/utils/pageLink.ts @@ -1,4 +1,4 @@ -import { Lang } from "@/types/lang" +import type { Lang } from "@/constants/languages" import type { EmbedEnum } from "./embeds" import type { Typename } from "./typename" diff --git a/types/rte/attrs.ts b/types/rte/attrs.ts index c0b15bfe0..f8bb36e30 100644 --- a/types/rte/attrs.ts +++ b/types/rte/attrs.ts @@ -1,6 +1,6 @@ import { RTEItemTypeEnum } from "./enums" import type { EmbedTypesEnum, RTEItemType } from "./enums" -import type { Lang } from "../lang" +import type { Lang } from "@/constants/languages" export interface Attributes { [key: string]: any