
Kompletný sprievodca internacionalizáciou Reactu
Od začiatku až po viacjazyčnú aplikáciu: nastavte i18n vo svojej aplikácii React a potom automatizujte preklady pomocou AI.
Nainštalujte balíky
Potrebujete tri balíky: react-i18next (väzby pre React), i18next (základnú knižnicu) a voliteľne i18next-browser-languagedetector na automatické rozpoznanie miestneho nastavenia.
npm install react-i18next i18next i18next-browser-languagedetector i18next-http-backendNakonfigurujte inštanciu i18n
Vytvorte konfiguračný súbor i18n, ktorý inicializuje i18next s Vaším predvoleným jazykom, prekladovými zdrojmi a reťazcom doplnkov. Tento súbor sa musí importovať vo vstupnom bode aplikácie pred vykreslením ktoréhokoľvek komponentu.
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import Backend from 'i18next-http-backend';
i18n
.use(Backend)
.use(LanguageDetector)
.use(initReactI18next) // Must come before .init()
.init({
fallbackLng: 'en',
debug: process.env.NODE_ENV === 'development',
interpolation: {
escapeValue: false, // React already escapes
},
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json',
},
});
export default i18n;Obaľte aplikáciu komponentom I18nextProvider
Importujte konfiguračný súbor i18n v koreňovej časti aplikácie a obaľte strom komponentov komponentom I18nextProvider. Bez neho useTranslation() namiesto preloženého textu vracia nespracované kľúče.
import React, { Suspense } from 'react';
import ReactDOM from 'react-dom/client';
import { I18nextProvider } from 'react-i18next';
import i18n from './i18n'; // Import your config
import App from './App';
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<Suspense fallback={<div>Loading...</div>}>
<I18nextProvider i18n={i18n}>
<App />
</I18nextProvider>
</Suspense>
</React.StrictMode>
);Vytvorte prekladové súbory
Pre každý jazyk vytvorte jeden súbor JSON. Pomocou vnorených kľúčov usporiadajte reťazce podľa funkcie alebo stránky. Zdrojový jazyk (zvyčajne angličtinu) používajte ako jediný zdroj pravdy.
// public/locales/en/translation.json
{
"nav": {
"home": "Home",
"about": "About",
"settings": "Settings"
},
"greeting": "Hello, {{name}}!",
"cart": {
"itemCount_one": "{{count}} item",
"itemCount_other": "{{count}} items"
}
}
// public/locales/de/translation.json
{
"nav": {
"home": "Startseite",
"about": "Über uns",
"settings": "Einstellungen"
},
"greeting": "Hallo, {{name}}!",
"cart": {
"itemCount_one": "{{count}} Artikel",
"itemCount_other": "{{count}} Artikel"
}
}Použite preklady v komponentoch
V ľubovoľnom komponente zavolajte useTranslation(), aby ste získali funkciu t(). Použite ju na jednoduché reťazce, interpolované premenné a preklady s vloženým JSX prostredníctvom komponentu Trans.
import { useTranslation } from 'react-i18next';
function Greeting({ userName }: { userName: string }) {
const { t } = useTranslation();
return (
<div>
<h1>{t('greeting', { name: userName })}</h1>
<nav>
<a href="/">{t('nav.home')}</a>
<a href="/about">{t('nav.about')}</a>
</nav>
</div>
);
}import { Trans, useTranslation } from 'react-i18next';
// For JSX inside translations:
// "terms": "By signing up, you agree to our <link>Terms</link>."
function SignUp() {
const { t } = useTranslation();
return (
<Trans i18nKey="terms" components={{
link: <a href="/terms" className="underline" />
}} />
);
}Spracujte množné čísla a premenné
i18next spracúva množné čísla podľa pravidiel CLDR — nie iba ako jednotné a množné číslo. Arabčina má 6 tvarov (nula, jeden, dva, málo, veľa, ostatné). Japončina má 1 tvar (ostatné). V prekladových súboroch definujte všetky požadované tvary a i18next automaticky vyberie správny.
// English: 2 forms (one, other)
{
"itemCount_one": "{{count}} item",
"itemCount_other": "{{count}} items"
}
// Arabic: 6 forms (zero, one, two, few, many, other)
{
"itemCount_zero": "لا عناصر",
"itemCount_one": "عنصر واحد",
"itemCount_two": "عنصران",
"itemCount_few": "{{count}} عناصر",
"itemCount_many": "{{count}} عنصرًا",
"itemCount_other": "{{count}} عنصر"
}
// Japanese: 1 form (other)
{
"itemCount_other": "{{count}}個のアイテム"
}Pridajte prepínanie a rozpoznávanie jazyka
Vytvorte výber jazyka, ktorý volá i18n.changeLanguage(). Skombinujte ho s rozpoznávaním jazyka prehliadača, aby sa pri prvej návšteve automaticky zistil preferovaný jazyk používateľa. Potom uložte jeho explicitný výber.
import { useTranslation } from 'react-i18next';
const LANGUAGES = [
{ code: 'en', label: 'English' },
{ code: 'de', label: 'Deutsch' },
{ code: 'ja', label: '日本語' },
{ code: 'es', label: 'Español' },
];
function LanguageSwitcher() {
const { i18n } = useTranslation();
return (
<select
value={i18n.language}
onChange={(e) => i18n.changeLanguage(e.target.value)}
>
{LANGUAGES.map(({ code, label }) => (
<option key={code} value={code}>{label}</option>
))}
</select>
);
}Automatizujte preklady
Po dokončení nastavenia i18n preložte súbory miestnych nastavení pomocou AI. Vo svojom IDE požiadajte asistenta AI o preklad zdrojového súboru alebo použite nástroj príkazového riadka i18n Agent vo svojom procese CI/CD.
# In your IDE, ask your AI assistant:
> Translate public/locales/en/translation.json to German, Japanese, and Spanish
✓ de/translation.json created (1.2s)
✓ ja/translation.json created (1.5s)
✓ es/translation.json created (1.1s)
# Or use the CLI in CI/CD:
npx i18n-agent translate public/locales/en/translation.json --lang de,ja,esAutomatizujte kontrolu kvality prekladov
Bežné nástrahy
Namiesto prekladov sa zobrazujú nespracované kľúče
Chyba Suspense bez záložného obsahu
Nesúlad pri hydratácii SSR
Kľúče prekladov nemajú automatické dokončovanie
Odporúčaná štruktúra súborov
my-react-app/
├── public/
│ └── locales/
│ ├── en/
│ │ ├── translation.json # Default namespace
│ │ ├── common.json # Shared strings
│ │ └── dashboard.json # Feature namespace
│ ├── de/
│ │ ├── translation.json
│ │ ├── common.json
│ │ └── dashboard.json
│ └── ja/
│ └── ...
├── src/
│ ├── i18n.ts # i18n configuration
│ ├── main.tsx # App entry with Provider
│ ├── App.tsx
│ └── components/
│ └── LanguageSwitcher.tsx
└── package.jsonVyskúšajte i18n Agent teraz
Potiahnite súbor na preklad sem
JSON, YAML, PO, XML, CSV, Markdown, Properties
alebo kliknite a vyberte súbor
Cieľové jazyky