Translation resources live in packages/shared/i18n/<lang>/<ns>.json (common, errors) and ship with de and en. The web app initializes react-i18next with bundled resources (?lng= wins, then the browser language); all shell components use useTranslation and the temporary t() stub is gone. The api localizes its uniform error bodies via a minimal i18next instance negotiated from Accept-Language. `pnpm i18n:check` fails CI when any key is missing in any language, backed by tested helpers in @dorfteich/shared. Closes #5 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
27 lines
687 B
TypeScript
27 lines
687 B
TypeScript
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
import { StrictMode } from 'react';
|
|
import { createRoot } from 'react-dom/client';
|
|
import { BrowserRouter } from 'react-router-dom';
|
|
|
|
import { App } from './App';
|
|
import './i18n';
|
|
import './styles/tokens.css';
|
|
import './styles/base.css';
|
|
|
|
const queryClient = new QueryClient();
|
|
|
|
const container = document.getElementById('root');
|
|
if (!container) {
|
|
throw new Error('index.html is missing the #root element');
|
|
}
|
|
|
|
createRoot(container).render(
|
|
<StrictMode>
|
|
<QueryClientProvider client={queryClient}>
|
|
<BrowserRouter>
|
|
<App />
|
|
</BrowserRouter>
|
|
</QueryClientProvider>
|
|
</StrictMode>,
|
|
);
|