|
9 | 9 | } from '../hooks/useBAISetting'; |
10 | 10 | import { SettingOutlined } from '@ant-design/icons'; |
11 | 11 | import { useToggle } from 'ahooks'; |
12 | | -import { Button } from 'antd'; |
| 12 | +import { Button, Typography } from 'antd'; |
13 | 13 | import Card from 'antd/es/card/Card'; |
| 14 | +import _ from 'lodash'; |
14 | 15 | import { useState } from 'react'; |
15 | 16 | import { Trans, useTranslation } from 'react-i18next'; |
16 | 17 | import { StringParam, useQueryParam, withDefault } from 'use-query-params'; |
@@ -55,6 +56,39 @@ const UserPreferencesPage = () => { |
55 | 56 | const [isOpenShellScriptEditModal, { toggle: toggleShellScriptEditModal }] = |
56 | 57 | useToggle(false); |
57 | 58 |
|
| 59 | + const languageOptions = [ |
| 60 | + { label: t('language.English'), value: 'en' }, |
| 61 | + { label: t('language.Korean'), value: 'ko' }, |
| 62 | + { label: t('language.Brazilian'), value: 'pt-BR' }, |
| 63 | + { label: t('language.Chinese'), value: 'zh-CN' }, |
| 64 | + { |
| 65 | + label: t('language.Chinese (Simplified)'), |
| 66 | + value: 'zh-TW', |
| 67 | + }, |
| 68 | + { label: t('language.French'), value: 'fr' }, |
| 69 | + { label: t('language.Finnish'), value: 'fi' }, |
| 70 | + { label: t('language.German'), value: 'de' }, |
| 71 | + { label: t('language.Greek'), value: 'el' }, |
| 72 | + { label: t('language.Indonesian'), value: 'id' }, |
| 73 | + { label: t('language.Italian'), value: 'it' }, |
| 74 | + { label: t('language.Japanese'), value: 'ja' }, |
| 75 | + { label: t('language.Mongolian'), value: 'mn' }, |
| 76 | + { label: t('language.Polish'), value: 'pl' }, |
| 77 | + { label: t('language.Portuguese'), value: 'pt' }, |
| 78 | + { label: t('language.Russian'), value: 'ru' }, |
| 79 | + { label: t('language.Spanish'), value: 'es' }, |
| 80 | + { label: t('language.Thai'), value: 'th' }, |
| 81 | + { label: t('language.Turkish'), value: 'tr' }, |
| 82 | + { label: t('language.Vietnamese'), value: 'vi' }, |
| 83 | + ]; |
| 84 | + let defaultLanguage = globalThis.navigator.language; |
| 85 | + defaultLanguage = _.includes(['zh-CN', 'zh-TW', 'pt-BR'], defaultLanguage) |
| 86 | + ? defaultLanguage |
| 87 | + : defaultLanguage.split('-')[0]; |
| 88 | + defaultLanguage = |
| 89 | + languageOptions.find((item) => item.value === defaultLanguage)?.value ?? |
| 90 | + 'en'; |
| 91 | + |
58 | 92 | const settingGroups: Array<SettingGroup> = [ |
59 | 93 | { |
60 | 94 | title: t('userSettings.Preferences'), |
@@ -86,46 +120,34 @@ const UserPreferencesPage = () => { |
86 | 120 | title: t('userSettings.Language'), |
87 | 121 | description: t('userSettings.DescLanguage'), |
88 | 122 | selectProps: { |
89 | | - options: [ |
90 | | - { label: t('language.OSDefault'), value: 'default' }, |
91 | | - { label: t('language.English'), value: 'en' }, |
92 | | - { label: t('language.Korean'), value: 'ko' }, |
93 | | - { label: t('language.Brazilian'), value: 'pt-BR' }, |
94 | | - { label: t('language.Chinese'), value: 'zh-CN' }, |
95 | | - { |
96 | | - label: t('language.Chinese (Simplified)'), |
97 | | - value: 'zh-TW', |
98 | | - }, |
99 | | - { label: t('language.French'), value: 'fr' }, |
100 | | - { label: t('language.Finnish'), value: 'fi' }, |
101 | | - { label: t('language.German'), value: 'de' }, |
102 | | - { label: t('language.Greek'), value: 'el' }, |
103 | | - { label: t('language.Indonesian'), value: 'id' }, |
104 | | - { label: t('language.Italian'), value: 'it' }, |
105 | | - { label: t('language.Japanese'), value: 'ja' }, |
106 | | - { label: t('language.Mongolian'), value: 'mn' }, |
107 | | - { label: t('language.Polish'), value: 'pl' }, |
108 | | - { label: t('language.Portuguese'), value: 'pt' }, |
109 | | - { label: t('language.Russian'), value: 'ru' }, |
110 | | - { label: t('language.Spanish'), value: 'es' }, |
111 | | - { label: t('language.Thai'), value: 'th' }, |
112 | | - { label: t('language.Turkish'), value: 'tr' }, |
113 | | - { label: t('language.Vietnamese'), value: 'vi' }, |
114 | | - ], |
| 123 | + options: languageOptions.map((item) => |
| 124 | + item.value === defaultLanguage |
| 125 | + ? { |
| 126 | + ...item, |
| 127 | + label: ( |
| 128 | + <> |
| 129 | + {item.label} |
| 130 | + <Typography.Text type="secondary"> |
| 131 | + ({t('userSettings.Default')}) |
| 132 | + </Typography.Text> |
| 133 | + </> |
| 134 | + ), |
| 135 | + } |
| 136 | + : item, |
| 137 | + ), |
115 | 138 | showSearch: true, |
116 | 139 | }, |
117 | | - defaultValue: 'default', |
118 | | - value: selectedLanguage || 'default', |
| 140 | + defaultValue: defaultLanguage, |
| 141 | + value: selectedLanguage || defaultLanguage, |
119 | 142 | setValue: setSelectedLanguage, |
120 | 143 | onChange: (value) => { |
121 | 144 | setSelectedLanguage(value); |
122 | | - const defaultLanguage = globalThis.navigator.language.split('-')[0]; |
123 | 145 | const event = new CustomEvent('language-changed', { |
124 | 146 | detail: { |
125 | | - language: value === 'default' ? defaultLanguage : value, |
| 147 | + language: value, |
126 | 148 | }, |
127 | 149 | }); |
128 | | - setLanguage(value === 'default' ? defaultLanguage : value); |
| 150 | + setLanguage(value); |
129 | 151 | document.dispatchEvent(event); |
130 | 152 | //@ts-ignore |
131 | 153 | console.log(globalThis.backendaioptions.get('selected_language')); |
|
0 commit comments