import en from './en'; import fa from './fa'; // Universal getCookie function export function getCookie(name: string): string | undefined { if (typeof window !== 'undefined') { // Client-side const match = document.cookie.match( new RegExp('(^| )' + name + '=([^;]+)'), ); return match ? decodeURIComponent(match[2]) : undefined; } else { // Server-side (Next.js App Router) try { // Dynamically import to avoid errors in client bundle const { cookies } = require('next/headers'); return cookies().get(name)?.value; } catch { return undefined; } } } // Universal setCookie function to change language export function changeLanguage(lang: TLocales, days = 365) { if (typeof window !== 'undefined') { // Client-side const expires = new Date(Date.now() + days * 864e5).toUTCString(); document.cookie = `lang=${encodeURIComponent(lang)}; expires=${expires}; path=/`; } else { // Server-side (Next.js App Router) try { const { cookies } = require('next/headers'); cookies().set('lang', lang, { path: '/', maxAge: days * 24 * 60 * 60 }); } catch { // No-op on server if not available } } } export const locales = { en: en as unknown as Translates, fa, } as Record; export const translates = ( key: keyof Translates, dynamicValue?: Record, ): string | ((dynamicValue: Record) => string) => { const lang = (getCookie('lang') || 'en') as TLocales; const value = locales[lang][key] || locales.en[key] || key; if (typeof value === 'function') { return value(dynamicValue || {}); } return value; }; export const t = ( key: keyof Translates, dynamicValue?: Record, ) => ''; export type TLocales = 'en' | 'fa'; export type Translates = { [K in keyof typeof en]: | string | ((dynamicValue: Record) => string); };