
Ang Kumpletong Gabay sa React Internationalization
Mula zero hanggang multilingual: i-set up ang i18n sa inyong React app, saka i-automate ang pagsasalin gamit ang AI.
I-install ang Mga Package
Kailangan ninyo ng tatlong package: react-i18next (ang React bindings), i18next (ang core library), at opsyonal na i18next-browser-languagedetector para sa awtomatikong pag-detect ng locale.
npm install react-i18next i18next i18next-browser-languagedetector i18next-http-backendI-configure ang i18n Instance
Gumawa ng i18n configuration file na nag-i-initialize ng i18next gamit ang default language ninyo, translation resources, at plugin chain. Dapat i-import ang file na ito sa entry point ng app ninyo bago mag-render ang anumang component.
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;I-wrap ang Inyong App gamit ang I18nextProvider
I-import ang i18n config file ninyo sa app root at i-wrap ang component tree ninyo gamit ang I18nextProvider. Kung wala ito, magre-return ang useTranslation() ng raw key sa halip na naisaling text.
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>
);Gumawa ng Mga Translation File
Gumawa ng tig-isang JSON file kada wika. Gumamit ng nested key para ayusin ang mga string ayon sa feature o pahina. Panatilihin ang source language (karaniwang English) bilang iisang source of truth.
// 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"
}
}Gamitin ang Mga Pagsasalin sa Mga Component
Tawagin ang useTranslation() sa anumang component para makuha ang t() function. Gamitin ito para sa mga simpleng string, interpolated na variable, at mga pagsasaling naka-embed sa JSX gamit ang Trans component.
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" />
}} />
);
}Pangasiwaan ang mga Plural at Variable
Pinangangasiwaan ng i18next ang mga plural gamit ang mga panuntunang CLDR — hindi lang singular/plural. May 6 na anyo ang Arabic (zero, one, two, few, many, other). May 1 lang ang Japanese (other). I-define ang lahat ng kinakailangang anyo sa inyong mga translation file at awtomatikong pipiliin ng i18next ang tama.
// 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}}個のアイテム"
}Magdagdag ng Language Switching at Detection
Bumuo ng language selector na tumatawag sa i18n.changeLanguage(). Pagsamahin ito sa browser language detector para awtomatikong ma-detect ang preferred language ng user sa unang pagbisita, pagkatapos ay i-persist ang kanilang tahasang pinili.
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>
);
}I-automate ang mga Pagsasalin
Kapag kumpleto na ang inyong i18n setup, isalin ang inyong mga locale file gamit ang AI. Sa inyong IDE, hilingin sa AI assistant na isalin ang source file, o gamitin ang i18n Agent CLI sa inyong CI/CD pipeline.
# 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,esI-automate ang Kalidad ng Pagsasalin
Mga Karaniwang Pitfall
Nagpapakita ang Mga Pagsasalin ng Mga Raw Key
Suspense Error Nang Walang Fallback
Hindi Tugmang SSR Hydration
Walang Autocomplete para sa Mga Translation Key
Inirerekomendang File Structure
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.jsonSubukan ang i18n Agent Ngayon
I-drop dito ang inyong translation file
JSON, YAML, PO, XML, CSV, Markdown, Properties
o i-click para mag-browse
Mga target language