Files
web/apps/scandic-web/i18n/serverContext.ts
Anton Gunnarsson 6eeaa1cd40 Merged in feat/sw-2872-dependency-inject-app-context-in-trpc-package (pull request #2478)
feat(SW-2872) Dependency inject app context in trpc package

* Move appRouter to trpc package

* WIP Move serverClient to trpc package

Doesn't handle errors yet

* Don't use global

* Use trpc everywhere


Approved-by: Linus Flood
2025-07-01 08:49:33 +00:00

35 lines
939 B
TypeScript

import "server-only"
import { headers } from "next/headers"
import { cache } from "react"
import { Lang } from "@scandic-hotels/common/constants/language"
import { languageSchema } from "@scandic-hotels/common/utils/languages"
const getRef = cache(() => ({ current: undefined as Lang | undefined }))
/**
* Set the language for the current request
*
* It works kind of like React's context,
* but on the server side, per request.
*
* @param newLang
*/
export function setLang(newLang: Lang) {
const parseResult = languageSchema.safeParse(newLang)
getRef().current = parseResult.success ? parseResult.data : Lang.en
}
/**
* Get the global language set for the current request
*/
export async function getLang(): Promise<Lang> {
const contextLang = getRef().current
const headersList = await headers()
const headerLang = headersList.get("x-lang") as Lang
const l = contextLang || headerLang || Lang.en
return l
}