<% if (i18nEnabled) { %>
'use client';

import { createContext, useCallback, useContext } from 'react';

type Messages = Record<string, Record<string, string>>;

const MessagesContext = createContext<Messages>({});

export { MessagesContext };

export function useTranslations(namespace: string) {
  const messages = useContext(MessagesContext);
  return useCallback(
    (key: string, values?: Record<string, string>): string => {
      const ns = (messages[namespace] || {}) as Record<string, string>;
      let result = ns[key] || `${namespace}.${key}`;
      if (values) {
        for (const [k, v] of Object.entries(values)) {
          result = result.replace(`{${k}}`, v);
        }
      }
      return result;
    },
    [messages, namespace]
  );
}
<% } else { %>
import { useCallback } from 'react';
import { messages } from '@/i18n';

type Messages = typeof messages;
type Namespace = keyof Messages;

export function useTranslations<N extends Namespace>(namespace: N) {
  return useCallback(
    (key: string, values?: Record<string, string>): string => {
      const ns = messages[namespace] as Record<string, string>;
      let result = ns[key] || `${String(namespace)}.${key}`;
      if (values) {
        for (const [k, v] of Object.entries(values)) {
          result = result.replace(`{${k}}`, v);
        }
      }
      return result;
    },
    [namespace]
  );
}
<% } %>
