
Täielik React'i internatsionaliseerimise juhend
Nullist mitmekeelseks: seadista React'i rakenduses i18n ja automatiseeri seejärel tõlked tehisintellektiga.
Paigalda paketid
Vajad kolme paketti: react-i18next (React'i sidumised), i18next (põhiteek) ja soovi korral i18next-browser-languagedetector lokaadi automaatseks tuvastamiseks.
npm install react-i18next i18next i18next-browser-languagedetector i18next-http-backendSeadista i18n-i eksemplar
Loo i18n-i seadistusfail, mis lähtestab i18next'i sinu vaikekeele, tõlkeressursside ja pluginate ahelaga. See fail tuleb importida rakenduse sisenemispunktis enne ühegi komponendi renderdamist.
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;Ümbritse rakendus I18nextProvideriga
Impordi i18n-i seadistusfail rakenduse juurtasemel ja ümbritse komponendipuu I18nextProvideriga. Ilma selleta tagastab useTranslation() tõlgitud teksti asemel töötlemata võtmed.
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>
);Loo tõlkefailid
Loo iga keele jaoks üks JSON-fail. Korrasta stringid funktsiooni või lehe järgi pesastatud võtmetega. Hoia lähtekeel, tavaliselt inglise keel, ainsa tõeallikana.
// 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"
}
}Kasuta tõlkeid komponentides
Kutsu mis tahes komponendis useTranslation(), et saada funktsioon t(). Kasuta seda lihtsate stringide, interpoleeritud muutujate ja Trans-komponendiga JSX-i manustatud tõlgete jaoks.
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" />
}} />
);
}Töötle mitmusevorme ja muutujaid
i18next töötleb mitmusevorme CLDR-i reeglite järgi, mitte ainult ainsuse ja mitmusega. Araabia keeles on kuus vormi (zero, one, two, few, many, other), jaapani keeles üks (other). Määra tõlkefailides kõik vajalikud vormid ning i18next valib automaatselt õige.
// 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}}個のアイテム"
}Lisa keele vahetamine ja tuvastamine
Loo keelevalija, mis kutsub funktsiooni i18n.changeLanguage(). Ühenda see veebilehitseja keeletuvastusega, et kasutaja eelistatud keel tuvastataks esimesel külastusel automaatselt ning tema selgesõnaline valik jääks hiljem meelde.
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>
);
}Automatiseeri tõlked
Kui i18n-i seadistus on valmis, tõlgi lokaadifailid tehisintellektiga. Palu IDE-s oma tehisintellekti abilisel lähtefail tõlkida või kasuta CI/CD-konveieris i18n Agent'i CLI-d.
# 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,esAutomatiseeri tõlkekvaliteet
Levinud komistuskivid
Tõlgetes kuvatakse töötlemata võtmed
Suspense'i tõrge ilma varusisuta
SSR-i hüdratsiooni lahknevus
Tõlkevõtmetel puudub automaattäide
Soovituslik failistruktuur
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.jsonProovi i18n Agent'i kohe
Kukuta tõlkefail siia
JSON, YAML, PO, XML, CSV, Markdown, Properties
või klõpsa faili valimiseks
Sihtkeeled