storybook-react-i18next
Version:
Add react-i18next support to Storybook
47 lines (43 loc) • 1.35 kB
JavaScript
import i18n from 'storybook-i18n/preview';
import React, { Fragment } from 'react';
import { useGlobals, useState, useEffect } from 'storybook/preview-api';
import { I18nextProvider } from 'react-i18next';
// src/preview.ts
var withI18Next = (story, context) => {
const {
parameters: { i18n: i18n2 }
} = context;
if (i18n2 === void 0) {
console.error(`The 'i18n' parameter is missing in 'parameters' configuration of preview.js. Define the 'i18n' parameter as follows:
parameters: {
i18n,
},
`);
}
const language = i18n2?.language;
const [{ locale }] = useGlobals();
const [key, setKey] = useState(0);
useEffect(() => {
if (i18n2) {
i18n2.on("languageChanged", () => {
setKey(Date.now());
});
return () => i18n2.off("languageChanged");
}
}, [i18n2]);
useEffect(() => {
if (i18n2 && locale && language && locale !== language) {
i18n2.changeLanguage(locale);
}
}, [language, locale, i18n2]);
return /* @__PURE__ */ React.createElement(Fragment, { key }, /* @__PURE__ */ React.createElement(I18nextProvider, { i18n: i18n2 }, story(context)));
};
// src/preview.ts
var i18nDecorators = i18n.decorators || [];
var preview = {
...i18n,
// @ts-ignore
decorators: [...i18nDecorators, withI18Next]
};
var preview_default = preview;
export { preview_default as default };