0.1.5 • Published 2 years ago
val-i18n-react v0.1.5
val-i18n-react
React goodies for val-i18n.
Install
npm add val-i18n-react val-i18n value-enhancerAPI
I18nProviderto providei18ncontext for descendant components.useTranslatehook to subscribe and get the latesti18n.t.useLanghook to subscribe and get the latesti18n.lang.useI18nhook to subscribe and get the latesti18ninstance.<Trans>component to insert React elements into translation template messages.
Usage
See live example on CodeSandbox.
import { I18n } from "val-i18n";
import { I18nProvider, useTranslate } from "val-i18n-react";
const i18n = new I18n("en", { en: { fruit: "apple" } });
const MyComponent = () => {
const t = useTranslate();
return <div>{t("fruit")}</div>;
};
const App = () => {
return (
<I18nProvider i18n={i18n}>
<MyComponent />
</I18nProvider>
);
};Trans Component
To insert React elements into the translation message:
import { Trans, useTranslate } from "val-i18n-react";
import { I18n, I18nProvider } from "val-i18n";
const locales = {
en: {
author: "CRIMX",
fruit: "apple",
eat: "{{name}} eats {{fruit}}.",
},
};
const i18n = new I18n("en", locales);
const MyComponent = () => {
const t = useTranslate();
return (
<Trans message={t("eat")}>
<strong data-t-slot="name">{t("author")}</strong>
<i style={{ color: "red" }} data-t-slot="fruit">
{t("fruit")}
</i>
</Trans>
);
};
const App = () => {
return (
<I18nProvider i18n={i18n}>
<MyComponent />
</I18nProvider>
);
};↓Outputs:
<>
<strong data-t-slot="name">CRIMX</strong> eats <i style={{ color: "red" }} data-t-slot="fruit">apple</i>.
<>data-t-slot can be ignored if there is only one placeholder.
<Trans message="a{{b}}c">
<h1>B</h1>
</Trans>↓Outputs:
<>
a<h1>B</h1>c
</>