Jak používat React Intl k internacionalizaci vašich aplikací React

React Intl je široce využívaná knihovna, poskytující rozsáhlý soubor komponent a nástrojů pro internacionalizaci aplikací postavených na Reactu. Internacionalizace, často označovaná zkratkou i18n, představuje proces adaptace softwaru pro různé jazykové a kulturní kontexty.

Díky ReactIntl je implementace podpory pro vícero jazyků a lokalizací ve vaší aplikaci React snadná a efektivní.

Instalace React Intl

Před použitím knihovny React Intl je nutné ji nejprve nainstalovat. K tomu můžete využít jeden z několika správců balíčků: npm, yarn nebo pnpm.

Pro instalaci pomocí npm použijte tento příkaz ve vašem terminálu:

 npm install react-intl

Pro instalaci pomocí yarn použijte tento příkaz:

 yarn add react-intl

Jak používat knihovnu React Intl

Po úspěšné instalaci knihovny React Intl můžete začít využívat její komponenty a funkce ve vaší aplikaci. React Intl se v mnoha ohledech podobá nativnímu JavaScript Intl API.

Klíčové komponenty, které React Intl nabízí, zahrnují zejména FormattedMessage a IntlProvider.

Komponenta FormattedMessage je zodpovědná za zobrazování přeložených textových řetězců v uživatelském rozhraní, zatímco komponenta IntlProvider zajišťuje poskytování překladů a informací o formátování pro celou aplikaci.

Před samotným použitím komponent FormattedMessage a IntlProvider pro překlad aplikace je nutné vytvořit překladový soubor. Tento soubor obsahuje veškeré překlady pro vaši aplikaci. Můžete se rozhodnout pro oddělené soubory pro každý jazyk a lokalizaci, nebo pro jeden soubor obsahující všechny překlady.

Zde je příklad:

 export const messagesInFrench = {
greeting: "Bonjour {name}"
}

export const messagesInItalian = {
greeting: "Buongiorno {name}"
}

Tento ukázkový překladový soubor obsahuje dva objekty překladů: `messagesInFrench` a `messagesInItalian`. Zástupný symbol `{name}` v uvítacím řetězci je určen k dynamickému nahrazení za běhu aplikace.

Pro využití překladů ve vaší aplikaci je třeba obalit kořenovou komponentu aplikace do komponenty `IntlProvider`. Komponenta `IntlProvider` akceptuje tři důležité vlastnosti (props) v Reactu: `locale`, `defaultLocale` a `messages`.

Vlastnost `locale` přijímá řetězec specifikující preferovanou lokalizaci uživatele, zatímco `defaultLocale` určuje výchozí jazyk, který se použije, pokud preferovaná lokalizace uživatele není dostupná. Vlastnost `messages` pak přijímá samotný objekt překladů.

Následuje příklad použití komponenty `IntlProvider`:

 import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import { IntlProvider } from "react-intl";
import { messagesInFrench } from "./translation";

ReactDOM.createRoot(document.getElementById("root")).render(
<React.StrictMode>
<IntlProvider locale="fr" messages={messagesInFrench} defaultLocale="en">
<App />
</IntlProvider>
</React.StrictMode>
);

V tomto příkladu se do komponenty `IntlProvider` předávají lokalizace `fr`, překlad `messagesInFrench` a výchozí lokalizace `en`.

Můžete předat i více než jednu lokalizaci nebo překladový objekt a `IntlProvider` automaticky detekuje jazyk prohlížeče uživatele a použije odpovídající překlady.

Pro zobrazení přeložených textových řetězců v aplikaci použijte komponentu `FormattedMessage`. Tato komponenta akceptuje `id` prop, který odpovídá ID zprávy v objektu zpráv.

Komponenta také akceptuje `defaultMessage` a `values` props. Prop `defaultMessage` specifikuje nouzovou zprávu, která se použije, pokud překlad pro aktuální lokalizaci není dostupný, zatímco prop `values` poskytuje dynamické hodnoty pro zástupné symboly v přeložených zprávách.

Například:

 import React from "react";
import { FormattedMessage } from "react-intl";

function App() {
return (
<div>
<p>
<FormattedMessage
id="greeting"
defaultMessage="Good morning {name}"
values={{ name: 'John'}}
/>
</p>
</div>
);
}

export default App;

V tomto ukázkovém bloku kódu prop `id` komponenty `FormattedMessage` odkazuje na klíč `greeting` z objektu `messagesInFrench` a `values` prop nahradí zástupný symbol `{name}` hodnotou „John“.

Formátování čísel pomocí komponenty FormattedNumber

React Intl také nabízí komponentu `FormattedNumber`, kterou můžete využít k formátování čísel na základě aktuální lokalizace. Tato komponenta přijímá různé parametry pro konfiguraci formátování, například styl, měnu a minimální a maximální počet desetinných míst.

Zde je několik příkladů:

 import React from "react";
import { FormattedNumber } from "react-intl";

function App() {
return (
<div>
<p>
Decimal: <FormattedNumber value={123.456} style="decimal" />
</p>
<p>
Percent: <FormattedNumber value={123.456} style="percent" />
</p>
</div>
);
}

export default App;

Tento příklad používá komponentu `FormattedNumber`, která přijímá `value` prop pro určení čísla, které má být formátováno.

Prostřednictvím prop `style` můžete upravit formát zobrazení čísla. Můžete nastavit `style` na hodnotu `decimal`, `percent` nebo `currency`.

Pokud nastavíte `style` na `currency`, komponenta `FormattedNumber` naformátuje číslo jako hodnotu měny, s použitím kódu měny specifikovaného v prop `currency`:

 import React from "react";
import { FormattedNumber } from "react-intl";

function App() {
return (
<div>
<p>
Price: <FormattedNumber value={123.456} style="currency" currency="USD" />
</p>
</div>
);
}

export default App;

V uvedeném bloku kódu komponenta `FormattedNumber` formátuje číslo s použitím stylu `currency` a měny USD.

Čísla můžete formátovat s definovaným počtem desetinných míst pomocí vlastností `minimumFractionDigits` a `maximumFractionDigits`.

`minimumFractionDigits` určuje minimální počet zobrazovaných desetinných míst. Naopak, `maximumFractionDigits` určuje maximální počet zobrazovaných desetinných míst.

Pokud má číslo méně desetinných míst, než je specifikováno v `minimumFractionDigits`, React Intl jej doplní nulami. Pokud má číslo více desetinných míst, než je nastaveno v `maximumFractionDigits`, knihovna číslo zaokrouhlí.

Zde je příklad demonstrující použití těchto vlastností:

 import React from "react";
import { FormattedNumber } from "react-intl";

function App() {
return (
<div>
<p>
<FormattedNumber
value={123.4567}
minimumFractionDigits={2}
maximumFractionDigits={3}
/>
</p>
</div>
);
}

export default App;

Formátování dat pomocí komponenty FormattedDate

Data můžete formátovat způsobem, který je konzistentní a snadno srozumitelný pomocí React Intl. Komponenta `FormattedDate` představuje jednoduchý a efektivní nástroj pro formátování dat. Funguje podobným způsobem jako knihovny pro práci s datem a časem, jako je například Moment.js.

Komponenta `FormattedDate` vyžaduje řadu vlastností (props), jako například `value`, `day`, `month` a `year`. Prop `value` přijímá datum, které chcete formátovat, a další props slouží ke konfiguraci jeho formátu.

Například:

 import React from "react";
import { FormattedDate } from "react-intl";

function App() {
const today = new Date();

return (
<div>
<p>
Today's date is
<FormattedDate
value={today}
day="numeric"
month="long"
year="numeric"
/>
</p>
</div>
);
}

export default App;

V tomto příkladu `value` prop používá aktuální datum. Pomocí props `day`, `month` a `year` také specifikujeme, že chceme, aby se rok, měsíc a den zobrazovaly v dlouhém formátu.

Kromě `day`, `month` a `year` existují i další props, které ovlivňují vzhled data. Následuje seznam těchto vlastností a hodnot, které akceptují:

  • rok: „numeric“, „2-digit“
  • měsíc: „numeric“, „2-digit“, „narrow“, „short“, „long“
  • den: „numeric“, „2-digit“
  • hodina: „numeric“, „2-digit“
  • minuta: „numeric“, „2-digit“
  • sekunda: „numeric“, „2-digit“
  • timeZoneName: „short“, „long“

Komponentu `FormattedDate` můžete také použít pro formátování a zobrazení času:

 import React from "react";
import { FormattedDate } from "react-intl";

function App() {
const today = new Date();

return (
<div>
<p>
The time is
<FormattedDate
value={today}
hour="numeric"
minute="numeric"
second="numeric"
/>
</p>
</div>
);
}

export default App;

Internacionalizujte své aplikace React pro širší publikum

Naučili jste se, jak instalovat a konfigurovat knihovnu React-Intl ve vaší aplikaci React. React-intl významně usnadňuje formátování čísel, dat a měn ve vaší aplikaci React. Data lze formátovat na základě preferované lokalizace uživatele pomocí komponent `FormattedMessage`, `FormattedNumber` a `FormattedDate`.

Vývojáři React často dělají chyby, které mohou mít závažné následky. Například nesprávná aktualizace stavu. Je důležité být si vědom těchto častých chyb a včas je napravit, abyste se vyhnuli potenciálním problémům.