feat: rename use of locale to lang where applicable
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
import styles from "./contact.module.css"
|
import styles from "./contact.module.css"
|
||||||
|
|
||||||
import { langEnum } from "@/types/lang"
|
import { Lang } from "@/constants/languages"
|
||||||
import type { Lang } from "@/types/lang"
|
|
||||||
import { Section, type ContactNode } from "@/types/requests/asides/contact"
|
import { Section, type ContactNode } from "@/types/requests/asides/contact"
|
||||||
|
|
||||||
export default function Contact({ sections, system: { locale } }: ContactNode) {
|
export default function Contact({ sections, system: { locale } }: ContactNode) {
|
||||||
@@ -72,17 +71,17 @@ export default function Contact({ sections, system: { locale } }: ContactNode) {
|
|||||||
|
|
||||||
function getVisitingAddressMessage(lang: Lang) {
|
function getVisitingAddressMessage(lang: Lang) {
|
||||||
switch (lang) {
|
switch (lang) {
|
||||||
case langEnum.sv:
|
case Lang.sv:
|
||||||
return "Besöksadress"
|
return "Besöksadress"
|
||||||
case langEnum.en:
|
case Lang.en:
|
||||||
return "Visiting address"
|
return "Visiting address"
|
||||||
case langEnum.da:
|
case Lang.da:
|
||||||
return "Besøgsadresse"
|
return "Besøgsadresse"
|
||||||
case langEnum.de:
|
case Lang.de:
|
||||||
return "Besuchsadresse"
|
return "Besuchsadresse"
|
||||||
case langEnum.fi:
|
case Lang.fi:
|
||||||
return "Vierailuosoite"
|
return "Vierailuosoite"
|
||||||
case langEnum.no:
|
case Lang.no:
|
||||||
return "Besøksadresse"
|
return "Besøksadresse"
|
||||||
default:
|
default:
|
||||||
return ""
|
return ""
|
||||||
|
|||||||
@@ -1,19 +1,17 @@
|
|||||||
import { localeToLang } from "@/constants/locales"
|
import { Lang, localeToLang } from "@/constants/languages"
|
||||||
import { type Lang, langEnum } from "@/types/lang"
|
|
||||||
import { headers } from "next/headers"
|
import { headers } from "next/headers"
|
||||||
|
|
||||||
export default function LangPopup({ lang }: { lang: Lang }) {
|
export default function LangPopup({ lang }: { lang: Lang }) {
|
||||||
const headersList = headers()
|
const headersList = headers()
|
||||||
const preferedLang = headersList.get("Accept-Language") ?? ""
|
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
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
//@ts-ignore
|
const langOfChoice: Lang = localeToLang[preferedLang as Lang]
|
||||||
const langOfChoice: Lang = localeToLang[preferedLang]
|
|
||||||
|
|
||||||
if (langOfChoice === lang) {
|
if (langOfChoice === lang) {
|
||||||
return null
|
return null
|
||||||
@@ -23,23 +21,23 @@ export default function LangPopup({ lang }: { lang: Lang }) {
|
|||||||
let viewIn = ""
|
let viewIn = ""
|
||||||
|
|
||||||
switch (langOfChoice) {
|
switch (langOfChoice) {
|
||||||
case langEnum.de:
|
case Lang.de:
|
||||||
language = "Deutsch"
|
language = "Deutsch"
|
||||||
viewIn = "Ansicht in"
|
viewIn = "Ansicht in"
|
||||||
break
|
break
|
||||||
case langEnum.da:
|
case Lang.da:
|
||||||
language = "Dansk"
|
language = "Dansk"
|
||||||
viewIn = "Se in"
|
viewIn = "Se in"
|
||||||
break
|
break
|
||||||
case langEnum.fi:
|
case Lang.fi:
|
||||||
language = "Suomi"
|
language = "Suomi"
|
||||||
viewIn = "Katso in"
|
viewIn = "Katso in"
|
||||||
break
|
break
|
||||||
case langEnum.no:
|
case Lang.no:
|
||||||
language = "Norsk"
|
language = "Norsk"
|
||||||
viewIn = "Se in"
|
viewIn = "Se in"
|
||||||
break
|
break
|
||||||
case langEnum.sv:
|
case Lang.sv:
|
||||||
language = "Svenska"
|
language = "Svenska"
|
||||||
viewIn = "Visa in"
|
viewIn = "Visa in"
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
import { Lang, langEnum } from "@/types/lang"
|
import { Lang } from "@/constants/languages"
|
||||||
|
|
||||||
export default function SkipToMainContent({ lang }: { lang: Lang }) {
|
export default function SkipToMainContent({ lang }: { lang: Lang }) {
|
||||||
let message = "Skip to main content"
|
let message = "Skip to main content"
|
||||||
|
|
||||||
switch (lang) {
|
switch (lang) {
|
||||||
case langEnum.de:
|
case Lang.de:
|
||||||
message = "Direkt zum Inhalt"
|
message = "Direkt zum Inhalt"
|
||||||
break
|
break
|
||||||
case langEnum.sv:
|
case Lang.sv:
|
||||||
message = "Fortsätt till huvudinnehåll"
|
message = "Fortsätt till huvudinnehåll"
|
||||||
break
|
break
|
||||||
case langEnum.da:
|
case Lang.da:
|
||||||
message = "Spring over og gå til hovedindhold"
|
message = "Spring over og gå til hovedindhold"
|
||||||
break
|
break
|
||||||
case langEnum.no:
|
case Lang.no:
|
||||||
message = "Gå videre til hovedsiden"
|
message = "Gå videre til hovedsiden"
|
||||||
break
|
break
|
||||||
case langEnum.fi:
|
case Lang.fi:
|
||||||
message = "Siirry pääsisältöön"
|
message = "Siirry pääsisältöön"
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,63 @@
|
|||||||
export const languages = {
|
export enum Lang {
|
||||||
da: "Dansk",
|
en = "en",
|
||||||
de: "Deutsch",
|
sv = "sv",
|
||||||
en: "English",
|
no = "no",
|
||||||
fi: "Suomi",
|
fi = "fi",
|
||||||
no: "Norsk",
|
da = "da",
|
||||||
sv: "Svenska",
|
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}`
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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>} */
|
/** @type {Record.<Lang, string>} */
|
||||||
export const pageNames = {
|
export const pageNames = {
|
||||||
da: "mine-sider",
|
da: "mine-sider",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from "next/server"
|
|||||||
|
|
||||||
import { auth } from "@/auth"
|
import { auth } from "@/auth"
|
||||||
|
|
||||||
import { findLocale } from "@/constants/locales"
|
import { findLang } from "@/constants/languages"
|
||||||
import { pageNames } from "@/constants/myPages"
|
import { pageNames } from "@/constants/myPages"
|
||||||
|
|
||||||
import { protectedRoutes } from "@/routes/protected"
|
import { protectedRoutes } from "@/routes/protected"
|
||||||
@@ -11,29 +11,29 @@ import type { NextAuthRequest } from "next-auth"
|
|||||||
|
|
||||||
export async function publiceMiddleware(request: NextRequest) {
|
export async function publiceMiddleware(request: NextRequest) {
|
||||||
const { nextUrl } = request
|
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()
|
return NextResponse.next()
|
||||||
}
|
}
|
||||||
|
|
||||||
const contentType = "currentContentPage"
|
const contentType = "currentContentPage"
|
||||||
const pathNameWithoutLocale = nextUrl.pathname.replace(`/${locale}`, "")
|
const pathNameWithoutLang = nextUrl.pathname.replace(`/${lang}`, "")
|
||||||
const searchParams = new URLSearchParams(request.nextUrl.searchParams)
|
const searchParams = new URLSearchParams(request.nextUrl.searchParams)
|
||||||
|
|
||||||
if (request.nextUrl.pathname.includes("preview")) {
|
if (request.nextUrl.pathname.includes("preview")) {
|
||||||
searchParams.set("uri", pathNameWithoutLocale.replace("/preview", ""))
|
searchParams.set("uri", pathNameWithoutLang.replace("/preview", ""))
|
||||||
return NextResponse.rewrite(
|
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) {
|
switch (contentType) {
|
||||||
case "currentContentPage":
|
case "currentContentPage":
|
||||||
return NextResponse.rewrite(
|
return NextResponse.rewrite(
|
||||||
new URL(
|
new URL(
|
||||||
`/${locale}/current-content-page?${searchParams.toString()}`,
|
`/${lang}/current-content-page?${searchParams.toString()}`,
|
||||||
nextUrl
|
nextUrl
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@@ -45,21 +45,19 @@ export async function publiceMiddleware(request: NextRequest) {
|
|||||||
|
|
||||||
async function authedMiddlewareFunction(request: NextAuthRequest) {
|
async function authedMiddlewareFunction(request: NextAuthRequest) {
|
||||||
const { nextUrl } = request
|
const { nextUrl } = request
|
||||||
const locale = findLocale(nextUrl.pathname)!
|
const lang = findLang(nextUrl.pathname)!
|
||||||
const isLoggedIn = !!request.auth
|
const isLoggedIn = !!request.auth
|
||||||
if (isLoggedIn) {
|
if (isLoggedIn) {
|
||||||
/**
|
/**
|
||||||
* Temporary hard rewrite to my pages
|
* Temporary hard rewrite to my pages
|
||||||
*/
|
*/
|
||||||
return NextResponse.rewrite(
|
return NextResponse.rewrite(new URL(`/${lang}/${pageNames[lang]}`, nextUrl))
|
||||||
new URL(`/${locale}/${pageNames[locale]}`, nextUrl)
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
/**
|
/**
|
||||||
* Redirect to Loginpage
|
* Redirect to Loginpage
|
||||||
* (Loginpage most likely to be removed)
|
* (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) {
|
export async function middleware(request: NextRequest) {
|
||||||
const { nextUrl } = request
|
const { nextUrl } = request
|
||||||
|
|
||||||
const locale = findLocale(nextUrl.pathname)
|
const lang = findLang(nextUrl.pathname)
|
||||||
if (!locale) {
|
if (!lang) {
|
||||||
//return <LocalePicker />
|
|
||||||
return Response.json("Not found!!!", { status: 404 })
|
return Response.json("Not found!!!", { status: 404 })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { pageNames } from "@/constants/myPages"
|
import { pageNames } from "@/constants/myPages"
|
||||||
|
|
||||||
import type { Lang } from "@/types/lang"
|
import type { Lang } from "@/constants/languages"
|
||||||
|
|
||||||
/* Authenticated routes */
|
/* Authenticated routes */
|
||||||
export const protectedRoutes: string[] = [
|
export const protectedRoutes: string[] = [
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Lang } from "../lang"
|
import type { Lang } from "@/constants/languages"
|
||||||
|
|
||||||
export type TrackingProps = {
|
export type TrackingProps = {
|
||||||
pageData: {
|
pageData: {
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Lang } from "./lang"
|
import { Lang } from "@/constants/languages"
|
||||||
|
|
||||||
export type SearchParams<S = {}> = {
|
export type SearchParams<S = {}> = {
|
||||||
searchParams: S & { [key: string]: string }
|
searchParams: S & { [key: string]: string }
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { Edges } from "../utils/edges"
|
import type { Edges } from "../utils/edges"
|
||||||
import type { Lang } from "@/types/lang"
|
import type { Lang } from "@/constants/languages"
|
||||||
import type { Typename } from "../utils/typename"
|
import type { Typename } from "../utils/typename"
|
||||||
|
|
||||||
export enum Section {
|
export enum Section {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Lang } from "@/types/lang"
|
import type { Lang } from "@/constants/languages"
|
||||||
import type { EmbedEnum } from "./embeds"
|
import type { EmbedEnum } from "./embeds"
|
||||||
import type { Typename } from "./typename"
|
import type { Typename } from "./typename"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { RTEItemTypeEnum } from "./enums"
|
import { RTEItemTypeEnum } from "./enums"
|
||||||
import type { EmbedTypesEnum, RTEItemType } from "./enums"
|
import type { EmbedTypesEnum, RTEItemType } from "./enums"
|
||||||
import type { Lang } from "../lang"
|
import type { Lang } from "@/constants/languages"
|
||||||
|
|
||||||
export interface Attributes {
|
export interface Attributes {
|
||||||
[key: string]: any
|
[key: string]: any
|
||||||
|
|||||||
Reference in New Issue
Block a user