@electerm/electerm-react 1.39.88 → 1.39.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/client/common/constants.js +6 -3
  2. package/client/common/create-title.jsx +2 -3
  3. package/client/common/init-setting-item.js +3 -6
  4. package/client/common/new-terminal.js +1 -2
  5. package/client/common/terminal-theme.js +2 -3
  6. package/client/components/auth/login.jsx +8 -3
  7. package/client/components/auth/login.styl +7 -1
  8. package/client/components/batch-op/batch-op.jsx +18 -36
  9. package/client/components/bookmark-form/form-ssh-common.jsx +6 -9
  10. package/client/components/bookmark-form/form-tabs.jsx +4 -8
  11. package/client/components/bookmark-form/index.jsx +5 -9
  12. package/client/components/bookmark-form/local-form-ui.jsx +4 -7
  13. package/client/components/bookmark-form/proxy.jsx +1 -2
  14. package/client/components/bookmark-form/quick-command.jsx +7 -8
  15. package/client/components/bookmark-form/rdp-form-ui.jsx +3 -5
  16. package/client/components/bookmark-form/render-auth-ssh.jsx +2 -3
  17. package/client/components/bookmark-form/render-connection-hopping.jsx +9 -11
  18. package/client/components/bookmark-form/render-delayed-scripts.jsx +2 -3
  19. package/client/components/bookmark-form/render-ssh-tunnel.jsx +9 -12
  20. package/client/components/bookmark-form/serial-form-ui.jsx +5 -9
  21. package/client/components/bookmark-form/sftp-enable.jsx +1 -2
  22. package/client/components/bookmark-form/telnet-form-ui.jsx +2 -4
  23. package/client/components/bookmark-form/tree-delete.jsx +3 -4
  24. package/client/components/bookmark-form/use-quick-commands.jsx +5 -6
  25. package/client/components/bookmark-form/use-submit.jsx +1 -2
  26. package/client/components/bookmark-form/use-ui.jsx +4 -6
  27. package/client/components/bookmark-form/vnc-form-ui.jsx +3 -5
  28. package/client/components/bookmark-form/web-form-ui.jsx +3 -5
  29. package/client/components/common/markdown.jsx +1 -1
  30. package/client/components/context-menu/context-menu.jsx +3 -4
  31. package/client/components/context-menu/menu-btn.jsx +13 -18
  32. package/client/components/footer/batch-input.jsx +2 -3
  33. package/client/components/footer/footer-entry.jsx +2 -3
  34. package/client/components/main/error-wrapper.jsx +2 -4
  35. package/client/components/main/upgrade.jsx +2 -4
  36. package/client/components/main/upgrade.styl +4 -1
  37. package/client/components/profile/profile-form-elem.jsx +28 -10
  38. package/client/components/quick-commands/quick-commands-box.jsx +1 -2
  39. package/client/components/quick-commands/quick-commands-form-elem.jsx +7 -12
  40. package/client/components/quick-commands/quick-commands-list-form.jsx +6 -7
  41. package/client/components/quick-commands/quick-commands-list.jsx +2 -3
  42. package/client/components/quick-commands/quick-commands-select.jsx +1 -2
  43. package/client/components/rdp/rdp-session.jsx +0 -3
  44. package/client/components/rdp/resolution-form.jsx +3 -6
  45. package/client/components/session/session.jsx +17 -6
  46. package/client/components/session/session.styl +5 -1
  47. package/client/components/session/sessions.jsx +4 -6
  48. package/client/components/setting-panel/keywords-form.jsx +2 -3
  49. package/client/components/setting-panel/list.jsx +3 -6
  50. package/client/components/setting-panel/setting-common.jsx +10 -14
  51. package/client/components/setting-panel/setting-modal.jsx +7 -11
  52. package/client/components/setting-panel/setting-terminal.jsx +13 -16
  53. package/client/components/setting-panel/start-session-select.jsx +1 -2
  54. package/client/components/setting-panel/tab-history.jsx +2 -3
  55. package/client/components/setting-sync/data-import.jsx +4 -7
  56. package/client/components/setting-sync/data-select.jsx +4 -16
  57. package/client/components/setting-sync/setting-sync-form.jsx +71 -48
  58. package/client/components/sftp/address-bar.jsx +1 -2
  59. package/client/components/sftp/confirm-modal-store.jsx +1 -2
  60. package/client/components/sftp/file-item.jsx +6 -8
  61. package/client/components/sftp/file-mode-modal.jsx +1 -2
  62. package/client/components/sftp/file-props-modal.jsx +1 -2
  63. package/client/components/sftp/list-table-ui.jsx +1 -2
  64. package/client/components/sftp/permission-render.jsx +1 -2
  65. package/client/components/sftp/sftp-entry.jsx +21 -7
  66. package/client/components/sftp/transfer-tag.jsx +1 -2
  67. package/client/components/shortcuts/shortcuts.jsx +5 -28
  68. package/client/components/sidebar/bookmark.jsx +6 -9
  69. package/client/components/sidebar/history.jsx +4 -6
  70. package/client/components/sidebar/index.jsx +9 -16
  71. package/client/components/sidebar/info-modal.jsx +10 -15
  72. package/client/components/sidebar/transfer-history-modal.jsx +3 -6
  73. package/client/components/sidebar/transfer-list-control.jsx +1 -2
  74. package/client/components/sidebar/transfer-list.jsx +1 -2
  75. package/client/components/sidebar/transfer-modal.jsx +2 -4
  76. package/client/components/sidebar/transport-ui.jsx +1 -2
  77. package/client/components/tabs/index.jsx +32 -22
  78. package/client/components/tabs/tab.jsx +5 -9
  79. package/client/components/tabs/window-control.jsx +4 -5
  80. package/client/components/terminal/index.jsx +5 -7
  81. package/client/components/terminal/term-search.jsx +2 -3
  82. package/client/components/terminal/terminal-interactive.jsx +2 -4
  83. package/client/components/terminal-info/activity.jsx +4 -5
  84. package/client/components/terminal-info/base.jsx +3 -4
  85. package/client/components/terminal-info/terminal-info.styl +1 -0
  86. package/client/components/terminal-theme/index.jsx +6 -9
  87. package/client/components/terminal-theme/theme-list.jsx +1 -2
  88. package/client/components/text-editor/text-editor-form.jsx +4 -8
  89. package/client/components/text-editor/text-editor.jsx +2 -3
  90. package/client/components/tree-list/bookmark-transport.jsx +4 -7
  91. package/client/components/tree-list/tree-list-item.jsx +4 -7
  92. package/client/components/tree-list/tree-list.jsx +3 -6
  93. package/client/components/vnc/vnc-form.jsx +2 -4
  94. package/client/components/vnc/vnc-session.jsx +1 -2
  95. package/client/entry/basic.js +4 -6
  96. package/client/store/common.js +10 -12
  97. package/client/store/index.js +4 -7
  98. package/client/store/init-state.js +2 -3
  99. package/client/store/load-data.js +10 -0
  100. package/client/store/setting.js +32 -5
  101. package/client/store/sync.js +10 -6
  102. package/client/store/system-menu.js +4 -6
  103. package/client/store/terminal-theme.js +2 -4
  104. package/package.json +1 -1
@@ -19,10 +19,7 @@ import {
19
19
 
20
20
  const FormItem = Form.Item
21
21
  const { Option } = Select
22
- const { prefix } = window
23
- const e = prefix('form')
24
- const t = prefix('quickCommands')
25
- const s = prefix('setting')
22
+ const e = window.translate
26
23
  const shortcutsDefaults = shortcutsDefaultsGen()
27
24
 
28
25
  export default function QuickCommandForm (props) {
@@ -38,7 +35,6 @@ export default function QuickCommandForm (props) {
38
35
  setShortcut(value)
39
36
  }
40
37
  const handleClear = () => {
41
- console.log('handleClear')
42
38
  form.setFieldsValue({
43
39
  shortcut: ''
44
40
  })
@@ -107,10 +103,10 @@ export default function QuickCommandForm (props) {
107
103
  store.addQuickCommand(update1)
108
104
  store.setSettingItem({
109
105
  id: '',
110
- name: t('newQuickCommand')
106
+ name: e('newQuickCommand')
111
107
  })
112
108
  }
113
- message.success(s('saved'))
109
+ message.success(e('saved'))
114
110
  }
115
111
  const initialValues = formData
116
112
  if (!initialValues.labels) {
@@ -123,7 +119,6 @@ export default function QuickCommandForm (props) {
123
119
  delay: 100
124
120
  }]
125
121
  }
126
- console.log('initialValues', initialValues, formData)
127
122
  const editorProps = {
128
123
  data: {
129
124
  name: uid,
@@ -144,7 +139,7 @@ export default function QuickCommandForm (props) {
144
139
  initialValues={initialValues}
145
140
  >
146
141
  <FormItem
147
- label={t('quickCommandName')}
142
+ label={e('quickCommandName')}
148
143
  rules={[{
149
144
  max: 60, message: '60 chars max'
150
145
  }, {
@@ -161,7 +156,7 @@ export default function QuickCommandForm (props) {
161
156
  {renderQm()}
162
157
  <FormItem
163
158
  name='labels'
164
- label={t('label')}
159
+ label={e('label')}
165
160
  >
166
161
  <Select
167
162
  mode='tags'
@@ -178,7 +173,7 @@ export default function QuickCommandForm (props) {
178
173
  </Select>
179
174
  </FormItem>
180
175
  <FormItem
181
- label={s('settingShortcuts')}
176
+ label={e('settingShortcuts')}
182
177
  name='shortcut'
183
178
  >
184
179
  <div>
@@ -189,7 +184,7 @@ export default function QuickCommandForm (props) {
189
184
  </div>
190
185
  </FormItem>
191
186
  <FormItem
192
- label={t('inputOnly')}
187
+ label={e('inputOnly')}
193
188
  name='inputOnly'
194
189
  valuePropName='checked'
195
190
  >
@@ -14,8 +14,7 @@ import { useRef } from 'react'
14
14
 
15
15
  const FormItem = Form.Item
16
16
  const FormList = Form.List
17
- const { prefix } = window
18
- const t = prefix('quickCommands')
17
+ const e = window.translate
19
18
 
20
19
  export default function renderQm () {
21
20
  const focused = useRef(0)
@@ -34,7 +33,7 @@ export default function renderQm () {
34
33
  min={1}
35
34
  step={1}
36
35
  max={65535}
37
- addonBefore={t('delay')}
36
+ addonBefore={e('delay')}
38
37
  placeholder={100}
39
38
  className='compact-input'
40
39
  />
@@ -46,8 +45,8 @@ export default function renderQm () {
46
45
  className='mg2x'
47
46
  >
48
47
  <Input.TextArea
49
- rows={1}
50
- placeholder={t('quickCommand')}
48
+ autoSize={{ minRows: 1 }}
49
+ placeholder={e('quickCommand')}
51
50
  className='compact-input qm-input'
52
51
  onFocus={() => {
53
52
  focused.current = i
@@ -100,7 +99,7 @@ export default function renderQm () {
100
99
  })
101
100
  const label = (
102
101
  <div>
103
- {t('commonCommands')}
102
+ {e('commonCommands')}
104
103
  <HelpIcon
105
104
  title={cmds}
106
105
  />
@@ -127,7 +126,7 @@ export default function renderQm () {
127
126
  block
128
127
  icon={<PlusOutlined />}
129
128
  >
130
- {t('quickCommand')}
129
+ {e('quickCommand')}
131
130
  </Button>
132
131
  </FormItem>
133
132
  </div>
@@ -10,8 +10,7 @@ import highlight from '../common/highlight'
10
10
  import QmTransport from './quick-command-transport'
11
11
 
12
12
  const { Option } = Select
13
- const { prefix } = window
14
- const q = prefix('quickCommands')
13
+ const e = window.translate
15
14
 
16
15
  export default class QuickCommandsList extends List {
17
16
  del = (item, e) => {
@@ -114,7 +113,7 @@ export default class QuickCommandsList extends List {
114
113
  renderLabels = () => {
115
114
  const arr = this.getLabels()
116
115
  const props = {
117
- placeholder: q('labels'),
116
+ placeholder: e('labels'),
118
117
  mode: 'multiple',
119
118
  value: this.state.labels,
120
119
  onChange: this.handleChange,
@@ -6,8 +6,7 @@ import { PureComponent } from 'react'
6
6
  import { Button } from 'antd'
7
7
  import './qm.styl'
8
8
 
9
- const { prefix } = window
10
- const e = prefix('quickCommands')
9
+ const e = window.translate
11
10
 
12
11
  export default class QuickCommandsFooter extends PureComponent {
13
12
  handleOpen = () => {
@@ -23,9 +23,6 @@ import scanCode from './code-scan'
23
23
  import resolutions from './resolutions'
24
24
 
25
25
  const { Option } = Select
26
- // const { prefix } = window
27
- // const e = prefix('ssh')
28
- // const m = prefix('menu')
29
26
 
30
27
  export default class RdpSession extends Component {
31
28
  constructor (props) {
@@ -11,10 +11,7 @@ import { formItemLayout, tailFormItemLayout } from '../../common/form-layout'
11
11
  import resolutions from './resolutions'
12
12
 
13
13
  const FormItem = Form.Item
14
- const { prefix } = window
15
- const e = prefix('ssh')
16
- const c = prefix('common')
17
- const m = prefix('menu')
14
+ const e = window.translate
18
15
 
19
16
  export default function ResolutionForm (props) {
20
17
  const {
@@ -43,7 +40,7 @@ export default function ResolutionForm (props) {
43
40
  return `${item.width}x${item.height}`
44
41
  }
45
42
  }, {
46
- title: m('del'),
43
+ title: e('del'),
47
44
  key: 'op',
48
45
  dataIndex: 'id',
49
46
  render: (id, item) => {
@@ -91,7 +88,7 @@ export default function ResolutionForm (props) {
91
88
  initialValues={initialValues}
92
89
  >
93
90
  <FormItem
94
- label={c('resolutions')}
91
+ label={e('resolutions')}
95
92
  {...formItemLayout}
96
93
  required
97
94
  className='ssh-tunnels-host'
@@ -13,7 +13,8 @@ import {
13
13
  SearchOutlined,
14
14
  FullscreenOutlined,
15
15
  PaperClipOutlined,
16
- CloseOutlined
16
+ CloseOutlined,
17
+ QuestionCircleOutlined
17
18
  } from '@ant-design/icons'
18
19
  import {
19
20
  Tooltip
@@ -37,6 +38,7 @@ import ResizeWrap from '../common/resize-wrap'
37
38
  import safeName from '../../common/safe-name'
38
39
  import TerminalInfoContent from '../terminal-info/content'
39
40
  import uid from '../../common/id-with-stamp'
41
+ import Link from '../common/external-link'
40
42
  import postMessage from '../../common/post-msg'
41
43
  import './session.styl'
42
44
 
@@ -60,9 +62,7 @@ const getPrevTerminal = terminals => {
60
62
  return last(terminals)
61
63
  }
62
64
 
63
- const { prefix } = window
64
- const e = prefix('ssh')
65
- const m = prefix('menu')
65
+ const e = window.translate
66
66
 
67
67
  export default class SessionWrapper extends Component {
68
68
  constructor (props) {
@@ -543,7 +543,18 @@ export default class SessionWrapper extends Component {
543
543
  if (isSsh || isLocal) {
544
544
  controls.push(isSsh ? paneMap.sftp : paneMap.fileManager)
545
545
  }
546
- const checkTxt = e('sftpPathFollowSsh') + ' [Beta]'
546
+ const checkTxt = (
547
+ <div>
548
+ <span>{e('sftpPathFollowSsh')}</span>
549
+ <span className='mg1l color-red'>[Beta]</span>
550
+ <Link
551
+ to='https://github.com/electerm/electerm/wiki/Warning-about-sftp-follow-ssh-path-function'
552
+ className='mg1l'
553
+ >
554
+ Wiki <QuestionCircleOutlined />
555
+ </Link>
556
+ </div>
557
+ )
547
558
  const checkProps = {
548
559
  onClick: this.toggleCheckSftpPathFollowSsh,
549
560
  className: classnames(
@@ -615,7 +626,7 @@ export default class SessionWrapper extends Component {
615
626
  <CloseSquareFilled
616
627
  className='mg1r icon-trash font16 iblock pointer spliter'
617
628
  onClick={() => this.delSplit()}
618
- title={m('del')}
629
+ title={e('del')}
619
630
  />
620
631
  )
621
632
  }
@@ -32,7 +32,11 @@
32
32
  &.active
33
33
  .type-tab-line
34
34
  display inline-block
35
-
35
+ #container
36
+ .sftp-follow-ssh-icon
37
+ &:hover
38
+ &.active
39
+ color red
36
40
  .is-transporting
37
41
  .type-tab.sftp
38
42
  .type-tab-line
@@ -25,9 +25,7 @@ import { Button } from 'antd'
25
25
  import toSimpleObj from '../../common/to-simple-obj'
26
26
  import { shortcutExtend } from '../shortcuts/shortcut-handler.js'
27
27
 
28
- const { prefix } = window
29
- const e = prefix('tabs')
30
- const c = prefix('control')
28
+ const e = window.translate
31
29
 
32
30
  class Sessions extends Component {
33
31
  state = {
@@ -187,8 +185,8 @@ class Sessions extends Component {
187
185
  })
188
186
  }
189
187
 
190
- onDuplicateTab = (tabToDup) => {
191
- this.setState(oldState => {
188
+ onDuplicateTab = async (tabToDup) => {
189
+ this.setState(async oldState => {
192
190
  const defaultStatus = statusMap.processing
193
191
  let tab = copy(tabToDup)
194
192
  updateCount(tab)
@@ -317,7 +315,7 @@ class Sessions extends Component {
317
315
  size='large'
318
316
  className='mg1r mg1b'
319
317
  >
320
- {c('newBookmark')}
318
+ {e('newBookmark')}
321
319
  </Button>
322
320
  <div className='pd3'>
323
321
  <LogoElem />
@@ -14,8 +14,7 @@ import {
14
14
  const FormItem = Form.Item
15
15
  const FormList = Form.List
16
16
  const OptionSel = Select.Option
17
- const { prefix } = window
18
- const f = prefix('form')
17
+ const e = window.translate
19
18
 
20
19
  export default function KeywordForm (props) {
21
20
  const {
@@ -131,7 +130,7 @@ export default function KeywordForm (props) {
131
130
  })}
132
131
  icon={<PlusOutlined />}
133
132
  >
134
- {f('keyword')}
133
+ {e('keyword')}
135
134
  </Button>
136
135
  </FormItem>
137
136
  </div>
@@ -12,10 +12,7 @@ import highlight from '../common/highlight'
12
12
  import { settingSyncId, settingCommonId } from '../../common/constants'
13
13
  import './list.styl'
14
14
 
15
- const { prefix } = window
16
- const e = prefix('menu')
17
- const c = prefix('common')
18
- const s = prefix('setting')
15
+ const e = window.translate
19
16
 
20
17
  export default class ItemList extends React.PureComponent {
21
18
  state = {
@@ -88,7 +85,7 @@ export default class ItemList extends React.PureComponent {
88
85
  title={e('del') + '?'}
89
86
  onConfirm={e => this.del(item, e)}
90
87
  okText={e('del')}
91
- cancelText={c('cancel')}
88
+ cancelText={e('cancel')}
92
89
  placement='top'
93
90
  >
94
91
  {icon}
@@ -124,7 +121,7 @@ export default class ItemList extends React.PureComponent {
124
121
  title={title}
125
122
  className='elli pd1y pd2x list-item-title'
126
123
  >
127
- {tag}{titleHighlight || s('new')}
124
+ {tag}{titleHighlight || e('new')}
128
125
  </div>
129
126
  {this.renderDelBtn(item)}
130
127
  {this.renderEditBtn(item, isGroup)}
@@ -29,11 +29,7 @@ import delay from '../../common/wait.js'
29
29
  import './setting.styl'
30
30
 
31
31
  const { Option } = Select
32
- const { prefix } = window
33
- const e = prefix('setting')
34
- const f = prefix('form')
35
- const p = prefix('sftp')
36
- const t = prefix('terminalThemes')
32
+ const e = window.translate
37
33
 
38
34
  const modifiers = [
39
35
  'Command',
@@ -55,7 +51,7 @@ export default class SettingCommon extends Component {
55
51
  passwordChanged: false,
56
52
  submittingPass: false,
57
53
  passInputFocused: false,
58
- placeholderLogin: window.pre.requireAuth ? '********' : f('notSet'),
54
+ placeholderLogin: window.pre.requireAuth ? '********' : e('notSet'),
59
55
  loginPass: ''
60
56
  }
61
57
 
@@ -92,7 +88,7 @@ export default class SettingCommon extends Component {
92
88
  loginPass: pass ? '********' : '',
93
89
  submittingPass: false,
94
90
  passwordChanged: true,
95
- placeholderLogin: pass ? '********' : f('notSet')
91
+ placeholderLogin: pass ? '********' : e('notSet')
96
92
  }, () => {
97
93
  this.submitting = false
98
94
  })
@@ -417,7 +413,7 @@ export default class SettingCommon extends Component {
417
413
  <div className='pd1b'>
418
414
  <div className='pd1b'>
419
415
  <span className='pd1r'>
420
- {e('global')} {f('proxy')}
416
+ {e('global')} {e('proxy')}
421
417
  <HelpIcon
422
418
  title={table}
423
419
  overlayInnerStyle={style}
@@ -478,7 +474,7 @@ export default class SettingCommon extends Component {
478
474
  }
479
475
  return (
480
476
  <div>
481
- <div className='pd1b'>{f('loginPassword')}</div>
477
+ <div className='pd1b'>{e('loginPassword')}</div>
482
478
  <div className='pd2b'>
483
479
  <Input.Password
484
480
  {...props}
@@ -575,7 +571,7 @@ export default class SettingCommon extends Component {
575
571
  }
576
572
 
577
573
  <div className='pd2b'>
578
- <span className='inline-title mg1r'>{t('uiThemes')}</span>
574
+ <span className='inline-title mg1r'>{e('uiThemes')}</span>
579
575
  <Select
580
576
  onChange={this.handleChangeTerminalTheme}
581
577
  popupMatchSelectWidth={false}
@@ -617,18 +613,18 @@ export default class SettingCommon extends Component {
617
613
  })
618
614
  }
619
615
  </Select>
620
- <Link className='mg1l' to={createEditLangLink(language)}>{p('edit')}</Link>
616
+ <Link className='mg1l' to={createEditLangLink(language)}>{e('edit')}</Link>
621
617
  </div>
622
618
  {this.renderRestart('languageChanged')}
623
- <div className='pd1b'>{t('default')} {e('execWindows')}</div>
619
+ <div className='pd1b'>{e('default')} {e('execWindows')}</div>
624
620
  {
625
621
  this.renderTextExec('execWindows')
626
622
  }
627
- <div className='pd1b'>{t('default')} {e('execMac')}</div>
623
+ <div className='pd1b'>{e('default')} {e('execMac')}</div>
628
624
  {
629
625
  this.renderTextExec('execMac')
630
626
  }
631
- <div className='pd1b'>{t('default')} {e('execLinux')}</div>
627
+ <div className='pd1b'>{e('default')} {e('execLinux')}</div>
632
628
  {
633
629
  this.renderTextExec('execLinux')
634
630
  }
@@ -17,11 +17,7 @@ import TabSettings from './tab-settings'
17
17
  import TabThemes from './tab-themes'
18
18
  import TabProfiles from './tab-profiles'
19
19
 
20
- const { prefix } = window
21
- const m = prefix('common')
22
- const t = prefix('terminalThemes')
23
- const q = prefix('quickCommands')
24
- const f = prefix('form')
20
+ const e = window.translate
25
21
 
26
22
  export default class SettingModalWrap extends Component {
27
23
  selectItem = (item) => {
@@ -72,32 +68,32 @@ export default class SettingModalWrap extends Component {
72
68
  const items = [
73
69
  {
74
70
  key: settingMap.history,
75
- label: m(settingMap.history),
71
+ label: e(settingMap.history),
76
72
  children: null
77
73
  },
78
74
  {
79
75
  key: settingMap.bookmarks,
80
- label: m(settingMap.bookmarks),
76
+ label: e(settingMap.bookmarks),
81
77
  children: null
82
78
  },
83
79
  {
84
80
  key: settingMap.setting,
85
- label: m(settingMap.setting),
81
+ label: e(settingMap.setting),
86
82
  children: null
87
83
  },
88
84
  {
89
85
  key: settingMap.terminalThemes,
90
- label: t('uiThemes'),
86
+ label: e('uiThemes'),
91
87
  children: null
92
88
  },
93
89
  {
94
90
  key: settingMap.quickCommands,
95
- label: q(settingMap.quickCommands),
91
+ label: e(settingMap.quickCommands),
96
92
  children: null
97
93
  },
98
94
  {
99
95
  key: settingMap.profiles,
100
- label: f(settingMap.profiles),
96
+ label: e(settingMap.profiles),
101
97
  children: null
102
98
  }
103
99
  ]
@@ -31,12 +31,7 @@ import HelpIcon from '../common/help-icon'
31
31
  import './setting.styl'
32
32
 
33
33
  const { Option } = Select
34
- const { prefix } = window
35
- const e = prefix('setting')
36
- const s = prefix('ssh')
37
- const p = prefix('sftp')
38
- const t = prefix('terminalThemes')
39
- const f = prefix('form')
34
+ const e = window.translate
40
35
 
41
36
  export default class SettingTerminal extends Component {
42
37
  state = {
@@ -107,12 +102,13 @@ export default class SettingTerminal extends Component {
107
102
 
108
103
  renderToggle = (name, extra = null) => {
109
104
  const checked = !!this.props.config[name]
105
+ const txt = e(name)
110
106
  return (
111
107
  <div className='pd2b' key={'rt' + name}>
112
108
  <Switch
113
109
  checked={checked}
114
- checkedChildren={e(name)}
115
- unCheckedChildren={e(name)}
110
+ checkedChildren={txt}
111
+ unCheckedChildren={txt}
116
112
  onChange={v => this.onChangeValue(v, name)}
117
113
  />
118
114
  {isNumber(extra) ? null : extra}
@@ -207,7 +203,7 @@ export default class SettingTerminal extends Component {
207
203
  const dataSource = [
208
204
  {
209
205
  value: '',
210
- desc: t('default')
206
+ desc: e('default')
211
207
  },
212
208
  {
213
209
  value: noTerminalBgValue,
@@ -423,7 +419,7 @@ export default class SettingTerminal extends Component {
423
419
  : window.et.sessionLogPath
424
420
  const tip = (
425
421
  <div>
426
- <span className='mg1r'>{f('supportRegexp')}</span>
422
+ <span className='mg1r'>{e('supportRegexp')}</span>
427
423
  <Link to={regexHelpLink}>wiki</Link>
428
424
  </div>
429
425
  )
@@ -431,7 +427,7 @@ export default class SettingTerminal extends Component {
431
427
  <div className='form-wrap pd1y pd2x'>
432
428
  <div className='pd1y font16 bold'>
433
429
  <CodeOutlined className='mg1r' />
434
- {s('terminal')} {e('settings')}
430
+ {e('terminal')} {e('settings')}
435
431
  </div>
436
432
  {
437
433
  this.renderNumber('scrollback', {
@@ -459,17 +455,17 @@ export default class SettingTerminal extends Component {
459
455
  this.renderNumber('fontSize', {
460
456
  step: 1,
461
457
  min: 9
462
- }, `${t('default')} ${e('fontSize')}`, 400)
458
+ }, `${e('default')} ${e('fontSize')}`, 400)
463
459
  }
464
460
  <div className='pd2b'>
465
- <span className='inline-title mg1r'>{t('default')} {e('fontFamily')}</span>
461
+ <span className='inline-title mg1r'>{e('default')} {e('fontFamily')}</span>
466
462
  {
467
463
  this.renderFontFamily()
468
464
  }
469
465
  </div>
470
466
  <div className='pd2b'>
471
467
  <div className='pd1b'>
472
- <span className='inline-title mg1r'>{f('keywordsHighlight')}</span>
468
+ <span className='inline-title mg1r'>{e('keywordsHighlight')}</span>
473
469
  <HelpIcon
474
470
  title={tip}
475
471
  />
@@ -496,7 +492,7 @@ export default class SettingTerminal extends Component {
496
492
  this.renderCursorStyleSelect()
497
493
  }
498
494
  {this.renderToggle('saveTerminalLogToFile', (
499
- <ShowItem to={terminalLogPath} className='mg1l'>{p('open')}</ShowItem>
495
+ <ShowItem to={terminalLogPath} className='mg1l'>{e('open')}</ShowItem>
500
496
  ))}
501
497
  {this.renderToggle('addTimeStampToTermLog')}
502
498
  {
@@ -505,7 +501,8 @@ export default class SettingTerminal extends Component {
505
501
  'rightClickSelectsWord',
506
502
  'pasteWhenContextMenu',
507
503
  'copyWhenSelect',
508
- 'ctrlOrMetaOpenTerminalLink'
504
+ 'ctrlOrMetaOpenTerminalLink',
505
+ 'sftpPathFollowSsh'
509
506
  ].map(this.renderToggle)
510
507
  }
511
508
  <div className='pd1b'>{e('terminalBackSpaceMode')}</div>
@@ -3,8 +3,7 @@ import { Component } from '../common/react-subx'
3
3
  import copy from 'json-deep-copy'
4
4
  import { createTitleWithTag } from '../../common/create-title'
5
5
 
6
- const { prefix } = window
7
- const e = prefix('setting')
6
+ const e = window.translate
8
7
  const { SHOW_CHILD } = TreeSelect
9
8
 
10
9
  export default class StartSessionSelect extends Component {
@@ -5,8 +5,7 @@ import {
5
5
  settingMap
6
6
  } from '../../common/constants'
7
7
 
8
- const { prefix } = window
9
- const c = prefix('control')
8
+ const e = window.translate
10
9
 
11
10
  export default function TabHistory (props) {
12
11
  const {
@@ -36,7 +35,7 @@ export default function TabHistory (props) {
36
35
  {...formProps}
37
36
  />
38
37
  )
39
- : <div className='form-wrap pd2 aligncenter'>{c('notFoundContent')}</div>
38
+ : <div className='form-wrap pd2 aligncenter'>{e('notFoundContent')}</div>
40
39
  }
41
40
  </SettingCol>
42
41
  </div>
@@ -15,14 +15,11 @@ import {
15
15
  } from '@ant-design/icons'
16
16
  import { Component } from '../common/react-subx'
17
17
 
18
- const { prefix } = window
19
- const e = prefix('form')
20
- const t = prefix('terminalThemes')
21
- const s = prefix('settingSync')
18
+ const e = window.translate
22
19
 
23
20
  export class DataTransport extends Component {
24
21
  render () {
25
- const txt = s('autoSync')
22
+ const txt = e('autoSync')
26
23
  const {
27
24
  store
28
25
  } = this.props
@@ -34,7 +31,7 @@ export class DataTransport extends Component {
34
31
  className='mg1r'
35
32
  onClick={store.handleExportAllData}
36
33
  >
37
- {t('export')}
34
+ {e('export')}
38
35
  </Button>
39
36
  <Upload
40
37
  beforeUpload={store.importAll}
@@ -55,7 +52,7 @@ export class DataTransport extends Component {
55
52
  unCheckedChildren={txt}
56
53
  className='mg3l mg1r'
57
54
  />
58
- <Tooltip title={s('autoSyncTip')}>
55
+ <Tooltip title={e('autoSyncTip')}>
59
56
  <InfoCircleOutlined />
60
57
  </Tooltip>
61
58
  </div>