locale.ts 859 B

1234567891011121314151617181920212223242526272829
  1. 'use server';
  2. import {cookies} from 'next/headers';
  3. import {Locale, locales, defaultLocale} from '@/i18n/config';
  4. // In this example the locale is read from a cookie. You could alternatively
  5. // also read it from a database, backend service, or any other source.
  6. const COOKIE_NAME = 'NEXT_LOCALE';
  7. export async function getUserLocale() {
  8. const c = await cookies();
  9. const cookieLocale = c.get(COOKIE_NAME)?.value;
  10. if (!cookieLocale) {
  11. return defaultLocale;
  12. }
  13. // Use type guard to ensure type safety
  14. const isValidLocale = (locale: string): locale is Locale => {
  15. return locales.includes(locale as Locale);
  16. };
  17. return isValidLocale(cookieLocale) ? cookieLocale : defaultLocale;
  18. }
  19. export async function setUserLocale(locale: Locale) {
  20. const c = await cookies();
  21. c.set(COOKIE_NAME, locale);
  22. }