Version 3 of the kit: - Radix UI replaced with Base UI (using the Shadcn UI patterns) - next-intl replaces react-i18next - enhanceAction deprecated; usage moved to next-safe-action - main layout now wrapped with [locale] path segment - Teams only mode - Layout updates - Zod v4 - Next.js 16.2 - Typescript 6 - All other dependencies updated - Removed deprecated Edge CSRF - Dynamic Github Action runner
47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
'use client';
|
|
|
|
import type { ReactNode } from 'react';
|
|
|
|
import type { AbstractIntlMessages } from 'next-intl';
|
|
import { NextIntlClientProvider } from 'next-intl';
|
|
|
|
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
|
|
interface I18nClientProviderProps {
|
|
locale: string;
|
|
messages: AbstractIntlMessages;
|
|
children: ReactNode;
|
|
timeZone?: string;
|
|
}
|
|
|
|
/**
|
|
* Client-side provider for next-intl.
|
|
* Wraps the application and provides translation context to all client components.
|
|
*/
|
|
export function I18nClientProvider({
|
|
locale,
|
|
messages,
|
|
timeZone = 'UTC',
|
|
children,
|
|
}: I18nClientProviderProps) {
|
|
return (
|
|
<NextIntlClientProvider
|
|
locale={locale}
|
|
messages={messages}
|
|
timeZone={timeZone}
|
|
getMessageFallback={(info) => {
|
|
// simply fallback to the key as is
|
|
return info.key;
|
|
}}
|
|
onError={(error) => {
|
|
if (isDevelopment) {
|
|
// Missing translations are expected and should only log an error
|
|
console.warn(`[Dev Only] i18n error: ${error.message}`);
|
|
}
|
|
}}
|
|
>
|
|
{children}
|
|
</NextIntlClientProvider>
|
|
);
|
|
}
|