diff options
| author | Mohamed Bassem <me@mbassem.com> | 2024-11-17 00:33:28 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-17 00:33:28 +0000 |
| commit | 4354ee7ba1c6ac9a9567944ae6169b1664e0ea8a (patch) | |
| tree | e27c9070930514d77582bae00b3350274116179c /apps/web/lib/userLocalSettings/userLocalSettings.ts | |
| parent | 9f2c7be23769bb0f4102736a683710b1a1939661 (diff) | |
| download | karakeep-4354ee7ba1c6ac9a9567944ae6169b1664e0ea8a.tar.zst | |
feature: Add i18n support. Fixes #57 (#635)
* feature(web): Add basic scaffolding for i18n
* refactor: Switch most of the app's strings to use i18n strings
* fix: Remove unused i18next-resources-for-ts command
* Add user setting
* More translations
* Drop the german translation for now
Diffstat (limited to 'apps/web/lib/userLocalSettings/userLocalSettings.ts')
| -rw-r--r-- | apps/web/lib/userLocalSettings/userLocalSettings.ts | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/apps/web/lib/userLocalSettings/userLocalSettings.ts b/apps/web/lib/userLocalSettings/userLocalSettings.ts index 826e6cf0..311ad99f 100644 --- a/apps/web/lib/userLocalSettings/userLocalSettings.ts +++ b/apps/web/lib/userLocalSettings/userLocalSettings.ts @@ -2,12 +2,20 @@ import { cookies } from "next/headers"; -import type { BookmarksLayoutTypes } from "./types"; +import type { BookmarksLayoutTypes, UserLocalSettings } from "./types"; import { + defaultUserLocalSettings, parseUserLocalSettings, USER_LOCAL_SETTINGS_COOKIE_NAME, } from "./types"; +export async function getUserLocalSettings(): Promise<UserLocalSettings> { + const userSettings = cookies().get(USER_LOCAL_SETTINGS_COOKIE_NAME); + return ( + parseUserLocalSettings(userSettings?.value) ?? defaultUserLocalSettings() + ); +} + export async function updateBookmarksLayout(layout: BookmarksLayoutTypes) { const userSettings = cookies().get(USER_LOCAL_SETTINGS_COOKIE_NAME); const parsed = parseUserLocalSettings(userSettings?.value); @@ -18,3 +26,14 @@ export async function updateBookmarksLayout(layout: BookmarksLayoutTypes) { sameSite: "lax", }); } + +export async function updateInterfaceLang(lang: string) { + const userSettings = cookies().get(USER_LOCAL_SETTINGS_COOKIE_NAME); + const parsed = parseUserLocalSettings(userSettings?.value); + cookies().set({ + name: USER_LOCAL_SETTINGS_COOKIE_NAME, + value: JSON.stringify({ ...parsed, lang }), + maxAge: 34560000, // Chrome caps max age to 400 days + sameSite: "lax", + }); +} |
