
Leiðarvísir um react-intl: Uppsetning alþjóðavæðingar í React
Settu FormatJS react-intl upp í React-forritinu þínu með IntlProvider, FormattedMessage, useIntl, ICU-skilaboðasniði og sjálfvirkum þýðingum.
Notarðu react-i18next í staðinn? Sjáðu leiðarvísi okkar um react-i18next
Settu react-intl upp
react-intl er hluti af FormatJS-verkefninu. Það býður upp á React-einingar og króka til að sníða strengi, tölur, dagsetningar og fleirtölu samkvæmt ICU MessageFormat-staðlinum.
npm install react-intlGrunnstilltu IntlProvider
Vefðu IntlProvider utan um rót forritsins. Gefðu því virka staðfærslu og flatan skilaboðahlut. Allar einingar þar fyrir neðan geta þá sótt þýðingar með FormattedMessage eða useIntl.
import React from 'react';
import ReactDOM from 'react-dom/client';
import { IntlProvider } from 'react-intl';
import App from './App';
import enMessages from './messages/en.json';
import deMessages from './messages/de.json';
const messages: Record<string, Record<string, string>> = {
en: enMessages,
de: deMessages,
};
// Detect locale from browser or your routing layer
const locale = navigator.language.split('-')[0] || 'en';
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<IntlProvider locale={locale} messages={messages[locale] || messages.en}>
<App />
</IntlProvider>
</React.StrictMode>
);Skilaboðaskrár
Búðu til eina JSON-skrá fyrir hverja staðfærslu. react-intl styður ICU MessageFormat-málskipan beint — fleirtala, val og breytur eru öll sett beint inn í skilaboðastrengi.
// messages/en.json
{
"app.greeting": "Hello, {name}!",
"nav.home": "Home",
"nav.about": "About",
"nav.settings": "Settings",
"cart.itemCount": "{count, plural, one {# item} other {# items}} in your cart"
}
// messages/de.json
{
"app.greeting": "Hallo, {name}!",
"nav.home": "Startseite",
"nav.about": "Über uns",
"nav.settings": "Einstellungen",
"cart.itemCount": "{count, plural, one {# Artikel} other {# Artikel}} in Ihrem Warenkorb"
}Notaðu þýðingar í einingum
react-intl býður upp á tvö aðalforritaskil: FormattedMessage-eininguna til að birta þýtt JSX og useIntl-krókinn fyrir skipunaraðgang (staðgengla, aria-merki og forritsbundið snið).
FormattedMessage-einingin
Notaðu FormattedMessage fyrir lýsandi þýðingar í JSX. Gefðu upp skilaboðaauðkennið og öll innskotsgildi. Einingin birtir þýdda strenginn beint.
import { FormattedMessage } from 'react-intl';
function Greeting({ userName }: { userName: string }) {
return (
<div>
<h1>
<FormattedMessage
id="app.greeting"
values={{ name: userName }}
/>
</h1>
<nav>
<a href="/"><FormattedMessage id="nav.home" /></a>
<a href="/about"><FormattedMessage id="nav.about" /></a>
</nav>
</div>
);
}useIntl-krókurinn
Notaðu useIntl() þegar þú þarft þýdda strenginn sem óskreytt gildi — fyrir staðgengla í ílagsreitum, aria-labels, document.title eða þegar strengir eru gefnir forritaskilum utan React. Það veitir einnig formatNumber, formatDate og formatRelativeTime.
import { useIntl } from 'react-intl';
function SearchBar() {
const intl = useIntl();
return (
<input
type="search"
placeholder={intl.formatMessage({ id: 'search.placeholder' })}
aria-label={intl.formatMessage({ id: 'search.ariaLabel' })}
/>
);
}
// useIntl also gives you formatNumber, formatDate, formatRelativeTime:
function PriceTag({ amount, currency }: { amount: number; currency: string }) {
const intl = useIntl();
return (
<span>{intl.formatNumber(amount, { style: 'currency', currency })}</span>
);
}Auðgaður texti (HTML í þýðingum)
Felldu JSX inn í þýðingar með XML-líkum merkjum í skilaboðastrengjunum. Gefðu merkjameðhöndlara með values-eiginleikanum til að birta tengla, feitletraðan texta eða hvaða React-einingu sem er innan þýddra skilaboða.
import { FormattedMessage } from 'react-intl';
// Message: "By signing up, you agree to our <link>Terms</link>."
// Key: "signup.terms"
// Value: "By signing up, you agree to our <link>Terms</link>."
function SignUp() {
return (
<FormattedMessage
id="signup.terms"
values={{
link: (chunks) => <a href="/terms" className="underline">{chunks}</a>,
}}
/>
);
}Útdráttur skilaboða með @formatjs/cli
FormatJS býður upp á skipanalínutól sem dregur skilaboðaauðkenni sjálfkrafa úr frumkóðanum þínum yfir í JSON-skrá. Þannig helst skilaboðaskráin samstillt við einingarnar þínar án handvirkrar skráningar.
# Install the CLI
npm install -g @formatjs/cli
# Extract messages from source code into a JSON file
formatjs extract 'src/**/*.tsx' --out-file messages/en.json --id-interpolation-pattern '[sha512:contenthash:base64:6]'
# Or use explicit IDs (recommended):
formatjs extract 'src/**/*.tsx' --out-file messages/en.json
# Compile messages for production (optional, improves perf)
formatjs compile messages/en.json --out-file compiled/en.json
formatjs compile messages/de.json --out-file compiled/de.jsonFleirtala og ICU-val
react-intl notar ICU MessageFormat beint. Fleirtala, val eftir kyni og hreiðrað snið eru öll sett beint inn í skilaboðastrengi — engar viðskeytisvenjur eða aðskildir lyklar eru nauðsynleg.
// ICU MessageFormat syntax — react-intl uses this natively
// English
{
"cart.itemCount": "{count, plural, one {# item} other {# items}} in your cart",
"inbox.unread": "You have {count, plural, =0 {no unread messages} one {# unread message} other {# unread messages}}"
}
// Arabic — 6 plural forms
{
"cart.itemCount": "{count, plural, zero {لا عناصر} one {عنصر واحد} two {عنصران} few {# عناصر} many {# عنصرًا} other {# عنصر}} في سلتك"
}
// Japanese — 1 form (other)
{
"cart.itemCount": "カートに{count}個の商品があります"
}ICU-val fyrir kyn og hlutverk
Notaðu select-málskipan ICU fyrir samhengisháðar þýðingar, svo sem kyn, notandahlutverk eða stöðugildi. select-segðin velur rétt afbrigði út frá uppgefnu gildi.
// Gender-dependent messages using ICU select
{
"user.greeting": "{gender, select, male {He} female {She} other {They}} liked your post.",
"user.invitation": "{role, select, admin {You can manage all settings.} editor {You can edit content.} other {You can view content.}}"
}
// Usage:
<FormattedMessage
id="user.greeting"
values={{ gender: user.gender }}
/>Sjálfvirknivæddu þýðingargæði
Algengar gildrur
Of mikið treyst á defaultMessage
Hreiðraðir hlutir í stað flatra lykla
IntlProvider veldur endurbirtingum
IntlProvider vantar í prófanir
Ráðlögð skráaskipan
my-react-app/
├── messages/
│ ├── en.json # Source of truth (English)
│ ├── de.json # German
│ ├── ja.json # Japanese
│ └── es.json # Spanish
├── compiled/ # Optional: compiled messages for prod
│ ├── en.json
│ └── ...
├── src/
│ ├── main.tsx # App entry with IntlProvider
│ ├── App.tsx
│ └── components/
│ ├── Greeting.tsx # Uses FormattedMessage
│ └── SearchBar.tsx # Uses useIntl
└── package.jsonPrófaðu i18n Agent núna
Slepptu þýðingarskránni þinni hér
JSON, YAML, PO, XML, CSV, Markdown, Properties
eða smelltu til að fletta
Markmál
Varastaðfærsla með react-intl-locale-chain
Þegar þýðingarlykil vantar í svæðisbundna staðfærslu á borð við pt-BR grípur react-intl beint til sjálfgefnu staðfærslunnar í stað þess að athuga fyrst yfirstaðfærsluna pt.
npm install react-intl-locale-chain<LocaleChainProvider
fallbacks={{
'pt-BR': ['pt', 'en'],
'zh-Hant-HK': ['zh-Hant', 'zh', 'en'],
}}
defaultLocale="en"
>
<App />
</LocaleChainProvider>Sjáðu leiðarvísi okkar um varastaðfærslur fyrir heildarlistann yfir studda verkgrind og 75 innbyggðar keðjur. Learn more →