Skip to content

Commit 1aa95ed

Browse files
authored
Merge pull request #400 from actiontech/feature/sqle-issue-2543
[feature]: implement language preference switch based on browser settings
2 parents fe41fbe + 4f22678 commit 1aa95ed

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

packages/base/src/App.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@ import { IReduxState } from './store';
55
import { useSelector } from 'react-redux';
66
import { StyledEngineProvider, ThemeProvider } from '@mui/system';
77
import { EmptyBox, HeaderProgress, SpinIndicator } from '@actiontech/shared';
8-
import zhCN from 'antd/locale/zh_CN';
8+
import antd_zh_CN from 'antd/locale/zh_CN';
9+
import antd_en_US from 'antd/locale/en_US';
910
import {
1011
useChangeTheme,
1112
useNotificationContext
1213
} from '@actiontech/shared/lib/hooks';
13-
import { SupportTheme, UserRolesType } from '@actiontech/shared/lib/enum';
14+
import {
15+
SupportLanguage,
16+
SupportTheme,
17+
UserRolesType
18+
} from '@actiontech/shared/lib/enum';
1419
import Nav from './page/Nav';
1520
import {
1621
useCurrentUser,
@@ -34,6 +39,7 @@ import dayjs from 'dayjs';
3439
import 'dayjs/locale/zh-cn';
3540
import updateLocale from 'dayjs/plugin/updateLocale';
3641
import { PermissionReduxState } from '@actiontech/shared/lib/types/common.type';
42+
import i18n, { getPreferredLanguages } from './locale';
3743

3844
import './index.less';
3945

@@ -69,6 +75,15 @@ function App() {
6975
token: state.user.token
7076
}));
7177

78+
const { currentLanguage, antdLanguage } = useMemo(() => {
79+
const lang = getPreferredLanguages()?.[0] ?? SupportLanguage.zhCN;
80+
81+
return {
82+
currentLanguage: lang,
83+
antdLanguage: lang === SupportLanguage.enUS ? antd_en_US : antd_zh_CN
84+
};
85+
}, []);
86+
7287
const { notificationContextHolder } = useNotificationContext();
7388

7489
const { getUserBySession } = useSessionUser();
@@ -161,14 +176,18 @@ function App() {
161176
}
162177
}, [getUserBySession, token, updateDriverList, updateFeaturePermission]);
163178

179+
useEffect(() => {
180+
i18n.changeLanguage(currentLanguage);
181+
}, [currentLanguage]);
182+
164183
return (
165184
<Wrapper>
166185
<StyleProvider
167186
hashPriority="high"
168187
transformers={[legacyLogicalPropertiesTransformer]}
169188
>
170189
<ConfigProvider
171-
locale={zhCN}
190+
locale={antdLanguage}
172191
theme={{
173192
algorithm:
174193
theme === SupportTheme.DARK

packages/base/src/locale/index.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { StorageKey, SupportLanguage } from '@actiontech/shared/lib/enum';
22
import { initReactI18next } from 'react-i18next';
3-
import i18n from 'sqle/src/locale';
3+
import i18n from 'i18next';
44
import sqleZhCN from 'sqle/src/locale/zh-CN';
55
import sqleEnUS from 'sqle/src/locale/en-US';
66
import commonZhCN from '@actiontech/shared/lib/locale/zh-CN';
@@ -34,7 +34,7 @@ if (en_dupKeys.length > 0) {
3434
`DMS EnUS_Locale error: The same key exists: ${en_dupKeys.toString()}`
3535
);
3636
}
37-
// endif
37+
// #endif
3838

3939
const allZhCN = {
4040
translation: {
@@ -72,10 +72,17 @@ const initReactI18n = () => {
7272
});
7373
};
7474

75+
const getPreferredLanguages = () => {
76+
if (navigator.languages && navigator.languages.length) {
77+
return Array.from(navigator.languages);
78+
}
79+
return [navigator.language];
80+
};
81+
7582
const t = (key: I18nKey, opts: TOptions = {}) => {
7683
return i18n.t(key, opts);
7784
};
7885

79-
export { t, initReactI18n };
86+
export { t, initReactI18n, getPreferredLanguages };
8087

8188
export default i18n;

0 commit comments

Comments
 (0)