
React uluslararasılaştırma için eksiksiz rehber
Sıfırdan çok dilli uygulamaya: React uygulamanızda i18n'i kurun, ardından çevirileri yapay zekayla otomatikleştirin.
Paketleri yükleyin
Üç pakete ihtiyacınız var: react-i18next (React bağlamaları), i18next (çekirdek kitaplık) ve isteğe bağlı olarak otomatik yerel ayar algılaması için i18next-browser-languagedetector.
npm install react-i18next i18next i18next-browser-languagedetector i18next-http-backendi18n örneğini yapılandırın
i18next'i varsayılan diliniz, çeviri kaynaklarınız ve eklenti zincirinizle başlatan bir i18n yapılandırma dosyası oluşturun. Bu dosya, herhangi bir bileşen oluşturulmadan önce uygulamanızın giriş noktasında içe aktarılmalıdır.
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;Uygulamanızı I18nextProvider ile sarmalayın
i18n yapılandırma dosyanızı uygulamanın kökünde içe aktarın ve bileşen ağacınızı I18nextProvider ile sarmalayın. Bunu yapmazsanız useTranslation(), çevrilmiş metin yerine ham anahtarları döndürür.
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>
);Çeviri dosyaları oluşturun
Her dil için bir JSON dosyası oluşturun. Dizeleri özelliğe veya sayfaya göre düzenlemek için iç içe anahtarlar kullanın. Kaynak dilinizi (genellikle İngilizce) tek doğruluk kaynağı olarak koruyun.
// 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"
}
}Çevirileri bileşenlerde kullanın
t() işlevini almak için herhangi bir bileşende useTranslation() çağrısını yapın. Bu işlevi basit dizelerde, değişken değerlerini yerleştirmede ve Trans bileşeniyle JSX'e gömülen çevirilerde kullanın.
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" />
}} />
);
}Çoğulları ve değişkenleri yönetin
i18next, yalnızca tekil/çoğul ayrımıyla değil CLDR kurallarıyla çoğulları yönetir. Arapçada 6 biçim (zero, one, two, few, many, other), Japoncada ise 1 biçim (other) vardır. Gerekli tüm biçimleri çeviri dosyalarınızda tanımlayın; i18next doğru biçimi otomatik olarak seçer.
// 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}}個のアイテム"
}Dil değiştirme ve algılama ekleyin
i18n.changeLanguage() çağrısını yapan bir dil seçici oluşturun. İlk ziyarette kullanıcının tercih ettiği dili otomatik olarak algılamak için bunu tarayıcı dil algılayıcısıyla birleştirin, ardından kullanıcının açık seçimini kalıcı olarak saklayın.
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>
);
}Çevirileri otomatikleştirin
i18n kurulumunuzu tamamladıktan sonra yerel ayar dosyalarınızı yapay zekayla çevirin. IDE'nizde yapay zeka asistanınızdan kaynak dosyanızı çevirmesini isteyin veya CI/CD işlem hattınızda i18n Agent CLI'ı kullanın.
# 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,esÇeviri kalitesini otomatikleştirin
Yaygın sorunlar
Çevirilerde ham anahtarların görünmesi
Geri dönüş olmadan Suspense hatası
SSR hidrasyon uyuşmazlığı
Çeviri anahtarları için otomatik tamamlama olmaması
Önerilen dosya yapısı
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.jsoni18n Agent'ı şimdi deneyin
Çeviri dosyanızı buraya bırakın
JSON, YAML, PO, XML, CSV, Markdown, Properties
veya göz atmak için tıklayın
Hedef diller