feat: rename use of locale to lang where applicable

This commit is contained in:
Michael Zetterberg
2024-04-08 15:17:07 +02:00
parent f3c9386ef4
commit 7ebc604156
14 changed files with 110 additions and 118 deletions

View File

@@ -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 ""

View File

@@ -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

View File

@@ -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
}

View File

@@ -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}`
)
}

View File

@@ -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
}

View File

@@ -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.<Lang, string>} */
export const pageNames = {
da: "mine-sider",

View File

@@ -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 <LocalePicker />
const lang = findLang(nextUrl.pathname)
if (!lang) {
return Response.json("Not found!!!", { status: 404 })
}

View File

@@ -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[] = [

View File

@@ -1,4 +1,4 @@
import { Lang } from "../lang"
import type { Lang } from "@/constants/languages"
export type TrackingProps = {
pageData: {

View File

@@ -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

View File

@@ -1,4 +1,4 @@
import { Lang } from "./lang"
import { Lang } from "@/constants/languages"
export type SearchParams<S = {}> = {
searchParams: S & { [key: string]: string }

View File

@@ -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 {

View File

@@ -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"

View File

@@ -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