Doceditor: fix i18n instance

This commit is contained in:
Timofey Boyko 2024-02-22 14:14:56 +03:00
parent ba36156387
commit 69f2903a4f
6 changed files with 94 additions and 93 deletions

View File

@ -100,86 +100,84 @@ const Root = ({
} = useSelectFileDialog({ instanceId: instanceId ?? "" }); } = useSelectFileDialog({ instanceId: instanceId ?? "" });
return ( return (
<I18nextProvider i18n={i18n}> // <I18nextProvider i18n={i18n}>
<ThemeProvider theme={theme} currentColorScheme={currentColorTheme}> <ThemeProvider theme={theme} currentColorScheme={currentColorTheme}>
<ErrorBoundary <ErrorBoundary
user={user ?? ({} as TUser)} user={user ?? ({} as TUser)}
version={pkgFile.version} version={pkgFile.version}
firebaseHelper={firebaseHelper} firebaseHelper={firebaseHelper}
currentDeviceType={currentDeviceType} currentDeviceType={currentDeviceType}
whiteLabelLogoUrls={logoUrls} whiteLabelLogoUrls={logoUrls}
isNextJS isNextJS
theme={theme} theme={theme}
i18n={i18n} i18n={i18n}
onError={onError} onError={onError}
> >
{isShowDeepLink ? ( {isShowDeepLink ? (
<DeepLink <DeepLink
fileInfo={fileInfo} fileInfo={fileInfo}
logoUrls={logoUrls} logoUrls={logoUrls}
userEmail={user?.email} userEmail={user?.email}
theme={theme} theme={theme}
currentDeviceType={currentDeviceType} currentDeviceType={currentDeviceType}
deepLinkConfig={settings?.deepLink} deepLinkConfig={settings?.deepLink}
setIsShowDeepLink={setIsShowDeepLink} setIsShowDeepLink={setIsShowDeepLink}
/> />
) : error && error.message !== "unauthorized" ? ( ) : error && error.message !== "unauthorized" ? (
<ErrorContainer <ErrorContainer
headerText={t?.("Common:Error")} headerText={t?.("Common:Error")}
customizedBodyText={getErrorMessage()} customizedBodyText={getErrorMessage()}
isEditor isEditor
/> />
) : ( ) : (
<> <>
{config && user && documentserverUrl && fileInfo && ( {config && user && documentserverUrl && fileInfo && (
<Editor <Editor
config={config} config={config}
user={user} user={user}
view={IS_VIEW} view={IS_VIEW}
successAuth={successAuth} successAuth={successAuth}
doc={doc} doc={doc}
t={t} t={t}
documentserverUrl={documentserverUrl} documentserverUrl={documentserverUrl}
fileInfo={fileInfo} fileInfo={fileInfo}
onSDKRequestSaveAs={onSDKRequestSaveAs} onSDKRequestSaveAs={onSDKRequestSaveAs}
onSDKRequestInsertImage={onSDKRequestInsertImage} onSDKRequestInsertImage={onSDKRequestInsertImage}
onSDKRequestReferenceSource={onSDKRequestReferenceSource} onSDKRequestReferenceSource={onSDKRequestReferenceSource}
onSDKRequestSelectDocument={onSDKRequestSelectDocument} onSDKRequestSelectDocument={onSDKRequestSelectDocument}
onSDKRequestSelectSpreadsheet={onSDKRequestSelectSpreadsheet} onSDKRequestSelectSpreadsheet={onSDKRequestSelectSpreadsheet}
/> />
)} )}
<Toast /> <Toast />
{isVisibleSelectFolderDialog && !!socketHelper && ( {isVisibleSelectFolderDialog && !!socketHelper && (
<SelectFolderDialog <SelectFolderDialog
socketHelper={socketHelper} socketHelper={socketHelper}
isVisible={isVisibleSelectFolderDialog} isVisible={isVisibleSelectFolderDialog}
onSubmit={onSubmitSelectFolderDialog} onSubmit={onSubmitSelectFolderDialog}
onClose={onCloseSelectFolderDialog} onClose={onCloseSelectFolderDialog}
titleSelectorFolder={titleSelectorFolderDialog} titleSelectorFolder={titleSelectorFolderDialog}
fileInfo={fileInfo ?? ({} as TFile)} fileInfo={fileInfo ?? ({} as TFile)}
getIsDisabled={getIsDisabledSelectFolderDialog} getIsDisabled={getIsDisabledSelectFolderDialog}
t={t} i18n={i18n}
i18n={i18n} />
/> )}
)} {selectFileDialogVisible && !!socketHelper && (
{selectFileDialogVisible && !!socketHelper && ( <SelectFileDialog
<SelectFileDialog socketHelper={socketHelper}
socketHelper={socketHelper} isVisible={selectFileDialogVisible}
isVisible={selectFileDialogVisible} onSubmit={onSubmitSelectFileDialog}
onSubmit={onSubmitSelectFileDialog} onClose={onCloseSelectFileDialog}
onClose={onCloseSelectFileDialog} getIsDisabled={getIsDisabledSelectFileDialog}
getIsDisabled={getIsDisabledSelectFileDialog} fileTypeDetection={selectFileDialogFileTypeDetection}
fileTypeDetection={selectFileDialogFileTypeDetection} fileInfo={fileInfo ?? ({} as TFile)}
fileInfo={fileInfo ?? ({} as TFile)} i18n={i18n}
t={t} />
i18n={i18n} )}
/> </>
)} )}
</> </ErrorBoundary>
)} </ThemeProvider>
</ErrorBoundary> // </I18nextProvider>
</ThemeProvider>
</I18nextProvider>
); );
}; };

View File

@ -1,4 +1,5 @@
import React from "react"; import React from "react";
import { useTranslation } from "react-i18next";
import FilesSelectorWrapper from "@docspace/shared/selectors/Files/FilesSelector.wrapper"; import FilesSelectorWrapper from "@docspace/shared/selectors/Files/FilesSelector.wrapper";
@ -14,9 +15,11 @@ const SelectFileDialog = ({
onClose, onClose,
onSubmit, onSubmit,
fileInfo, fileInfo,
t,
i18n, i18n,
}: SelectFileDialogProps) => { }: SelectFileDialogProps) => {
const { t } = useTranslation();
const sessionPath = sessionStorage.getItem("filesSelectorPath"); const sessionPath = sessionStorage.getItem("filesSelectorPath");
const headerLabel = fileTypeDetection.filterParam const headerLabel = fileTypeDetection.filterParam

View File

@ -17,9 +17,10 @@ const SelectFolderDialog = ({
titleSelectorFolder, titleSelectorFolder,
fileInfo, fileInfo,
getIsDisabled, getIsDisabled,
t,
i18n, i18n,
}: SelectFolderDialogProps) => { }: SelectFolderDialogProps) => {
const { t } = useTranslation();
const sessionPath = sessionStorage.getItem("filesSelectorPath"); const sessionPath = sessionStorage.getItem("filesSelectorPath");
const cancelButtonProps: TSelectorCancelButton = { const cancelButtonProps: TSelectorCancelButton = {

View File

@ -21,16 +21,16 @@ const useI18N = ({ settings, user }: UseI18NProps) => {
}, [settings?.timezone]); }, [settings?.timezone]);
React.useEffect(() => { React.useEffect(() => {
if (isInit.current || !user?.cultureName || !settings?.culture) return; if (isInit.current || (!user?.cultureName && !settings?.culture)) return;
isInit.current = true; isInit.current = true;
const instance = getI18NInstance( const instance = getI18NInstance(
user.cultureName || "en", user?.cultureName ?? "en",
settings.culture, settings?.culture ?? "en",
); );
setI18N(instance); if (instance) setI18N(instance);
}, [settings?.culture, user?.cultureName]); }, [settings?.culture, user?.cultureName]);
return { i18n }; return { i18n };

View File

@ -238,7 +238,7 @@ export interface SelectFolderDialogProps {
selectedFileInfo: TSelectedFileInfo, selectedFileInfo: TSelectedFileInfo,
) => Promise<void>; ) => Promise<void>;
fileInfo: TFile; fileInfo: TFile;
t: TTranslation | null;
i18n: i18n; i18n: i18n;
} }
@ -274,7 +274,7 @@ export interface SelectFileDialogProps {
selectedFileInfo: TSelectedFileInfo, selectedFileInfo: TSelectedFileInfo,
) => Promise<void>; ) => Promise<void>;
fileInfo: TFile; fileInfo: TFile;
t: TTranslation | null;
i18n: i18n; i18n: i18n;
} }

View File

@ -8,13 +8,13 @@ import { getLtrLanguageForEditor } from "@docspace/shared/utils/common";
import { translations } from "./autoGeneratedTranslations"; import { translations } from "./autoGeneratedTranslations";
export const getI18NInstance = (lng: string, portalLng: string) => { export const getI18NInstance = (lng: string, portalLng: string) => {
const newInstance = i18n.createInstance(); if (typeof window === "undefined") return;
const currentLng = getLtrLanguageForEditor(lng, portalLng, true); const currentLng = getLtrLanguageForEditor(lng, portalLng, true);
// const cultures = config.web.cultures.split(","); // const cultures = config.web.cultures.split(",");
newInstance.use(initReactI18next).init({ i18n.use(initReactI18next).init({
lng: currentLng, lng: currentLng,
fallbackLng: "en", fallbackLng: "en",
load: "currentOnly", load: "currentOnly",
@ -35,14 +35,13 @@ export const getI18NInstance = (lng: string, portalLng: string) => {
react: { react: {
useSuspense: false, useSuspense: false,
}, },
resources: {},
}); });
Array.from(translations).forEach(([lng, nsList]) => { Array.from(translations).forEach(([lng, nsList]) => {
Array.from(nsList).forEach(([ns, obj]) => { Array.from(nsList).forEach(([ns, obj]) => {
newInstance.addResourceBundle(lng, ns, obj, true, true); i18n.addResourceBundle(lng, ns, obj, true, true);
}); });
}); });
return newInstance; return i18n;
}; };