feat: add i18n support for antd and WebFastifyForm

pull/105/merge
moonrailgun 2 years ago
parent 50991708f2
commit 63c203e897

@ -21,6 +21,17 @@ regField('select', FastifyFormSelect);
regField('checkbox', FastifyFormCheckbox); regField('checkbox', FastifyFormCheckbox);
regField('custom', FastifyFormCustom); regField('custom', FastifyFormCustom);
let webFastifyFormConfig = {
submitLabel: 'Submit',
};
export function setWebFastifyFormConfig(config: typeof webFastifyFormConfig) {
webFastifyFormConfig = {
...webFastifyFormConfig,
...config,
};
}
const WebFastifyFormContainer: FastifyFormContainerComponent = React.memo( const WebFastifyFormContainer: FastifyFormContainerComponent = React.memo(
(props) => { (props) => {
const layout = props.layout; const layout = props.layout;
@ -42,7 +53,7 @@ const WebFastifyFormContainer: FastifyFormContainerComponent = React.memo(
onClick={() => props.handleSubmit()} onClick={() => props.handleSubmit()}
disabled={props.canSubmit === false} disabled={props.canSubmit === false}
> >
{props.submitLabel ?? '提交'} {props.submitLabel ?? webFastifyFormConfig.submitLabel}
</Button> </Button>
</Form.Item> </Form.Item>
); );

@ -10,7 +10,10 @@ export { Image, setImageUrlParser } from './Image';
export { SensitiveText } from './SensitiveText'; export { SensitiveText } from './SensitiveText';
export { VirtualChatList } from './VirtualChatList'; export { VirtualChatList } from './VirtualChatList';
export { WebMetaForm } from './WebMetaForm'; export {
WebMetaForm,
setWebFastifyFormConfig as setWebMetaFormConfig,
} from './WebMetaForm';
export { export {
createFastifyFormSchema as createMetaFormSchema, createFastifyFormSchema as createMetaFormSchema,
fieldSchema as metaFormFieldSchema, fieldSchema as metaFormFieldSchema,

@ -119,8 +119,8 @@ export async function setLanguage(lang: AllowedLanguage): Promise<void> {
/** /**
* i18n * i18n
*/ */
export function getLanguage(): string { export function getLanguage(): AllowedLanguage {
return i18next.language; return i18next.language as AllowedLanguage;
} }
/** /**

@ -7,9 +7,11 @@ import {
Routes, Routes,
} from 'react-router-dom'; } from 'react-router-dom';
import { import {
getLanguage,
parseUrlStr, parseUrlStr,
sharedEvent, sharedEvent,
TcProvider, TcProvider,
useAsync,
useColorScheme, useColorScheme,
useGlobalConfigStore, useGlobalConfigStore,
useLanguage, useLanguage,
@ -28,6 +30,8 @@ import { AppRouterApi } from './components/AppRouterApi';
import { DndProvider } from 'react-dnd'; import { DndProvider } from 'react-dnd';
import { HTML5Backend } from 'react-dnd-html5-backend'; import { HTML5Backend } from 'react-dnd-html5-backend';
import { ErrorBoundary } from './components/ErrorBoundary'; import { ErrorBoundary } from './components/ErrorBoundary';
import enUS from 'antd/es/locale/en_US';
import type { Locale } from 'antd/es/locale-provider';
const AppRouter: any = isElectron() ? HashRouter : BrowserRouter; const AppRouter: any = isElectron() ? HashRouter : BrowserRouter;
@ -55,15 +59,34 @@ const InviteRoute = Loadable(
) )
); );
export const TcAntdProvider: React.FC<PropsWithChildren> = React.memo(
(props) => {
const { value: locale } = useAsync(async (): Promise<Locale> => {
const language = getLanguage();
if (language === 'zh-CN') {
return import('antd/es/locale/zh_CN').then((m) => m.default);
}
return enUS;
}, []);
return (
<AntdProvider getPopupContainer={getPopupContainer} locale={locale}>
{props.children}
</AntdProvider>
);
}
);
TcAntdProvider.displayName = 'TcAntdProvider';
const AppProvider: React.FC<PropsWithChildren> = React.memo((props) => { const AppProvider: React.FC<PropsWithChildren> = React.memo((props) => {
return ( return (
<Suspense fallback={<LoadingSpinner />}> <Suspense fallback={<LoadingSpinner />}>
<AppRouter> <AppRouter>
<TcProvider> <TcProvider>
<DndProvider backend={HTML5Backend}> <DndProvider backend={HTML5Backend}>
<AntdProvider getPopupContainer={getPopupContainer}> <TcAntdProvider>{props.children}</TcAntdProvider>
{props.children}
</AntdProvider>
</DndProvider> </DndProvider>
</TcProvider> </TcProvider>
</AppRouter> </AppRouter>

@ -21,7 +21,7 @@ import { getUserJWT } from './utils/jwt-helper';
import _get from 'lodash/get'; import _get from 'lodash/get';
import { recordMeasure } from './utils/measure-helper'; import { recordMeasure } from './utils/measure-helper';
import { postMessageEvent } from './utils/event-helper'; import { postMessageEvent } from './utils/event-helper';
import { setImageUrlParser } from 'tailchat-design'; import { setImageUrlParser, setWebMetaFormConfig } from 'tailchat-design';
recordMeasure('init'); recordMeasure('init');
postMessageEvent('init'); postMessageEvent('init');
@ -72,6 +72,10 @@ setGlobalLoading((text) => {
setImageUrlParser(parseUrlStr); setImageUrlParser(parseUrlStr);
setWebMetaFormConfig({
submitLabel: t('提交'),
});
const backToLoginPage = (() => { const backToLoginPage = (() => {
let timer: number; let timer: number;

Loading…
Cancel
Save